iPaaS文档库 iPaaS文档库
00 概述
01 产品安装指南
02 快速入门指南
03 Studio使用指南
04 iPaaS使用指南
05 高级配置指南
06 接口服务说明
07 升级&数据迁移指南
08 产品集成指南
09 FAQ
10 iPaaS上线指南
运维指南
  • iPaaS-API编排处理后报文传递问题
  • 问题描述
  • 原因分析
  • 消息构建
  • 消息结构
  • 解决方案
  • 方案一:使用脚本图元赋值
  • 方案二:使用 Java 图元赋值

# iPaaS-API编排处理后报文传递问题

# 问题描述

在 iPaaS 平台的 API 编排流程中,当流程通过脚本或异常线(错误处理路径)等方式处理报文后,若希望将处理后的报文传递给后续业务图元作为请求报文,或以响应报文形式输出,常会遇到以下问题:

  • 请求报文无法正常传递
  • 无法返回响应报文
  • 流程报错或挂起

# 原因分析

# 消息构建

在iPaaS中,需要将各种协议的数据和报文转换为统一的消息格式,以便在系统中传递。消息构建即是通过消息构建 API 创建符合 iPaaS 消息结构的标准消息对象。 详细的消息构建说明参考:消息构建 (opens new window)

# 消息结构

ESB 中传递的消息接口为 com.primeton.esb.message.ITipMessagePayload,包含以下四个部分:

  • ProtocolHeader:消息的协议头
  • MessageHeader:消息头
  • SystemHeader:系统头
  • MessagePayload:消息负载

如图:

API 编排引擎在执行流程时,需要明确的符合消息结构的 输入消息(inMessage) 和 输出消息(outMessage) 作为流程的最终传递或返回结果。当流程通过脚本、异常线等方式执行后,如果没有显式构建输入或输出消息,引擎将无法确定传递内容,从而导致流程异常。

# 解决方案

# 方案一:使用脚本图元赋值

在异常线后的流程中添加 Groovy 脚本图元,通过代码构建并设置输出消息(输入消息的构建方式类似,可参考实现)。

示例代码如下:

System.out.println("error:接口异常了")
helper.echo("error:接口异常了")

import java.util.HashMap;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.MessageConstants;
import com.primeton.esb.message.TipMessageBuilder;

ITipMessagePayload inMessage = context.inMessage;
TipMessageBuilder builder = TipMessageBuilder.withPayload("error:接口异常了");

HashMap<String, Object> messageHeaders = new HashMap<String, Object>();
builder.setSystemHeader(MessageConstants.MESSAGE_INVOKE_TYPE, MessageConstants.REQUEST_RESPONSE);
builder.setMessageHeaders(messageHeaders);

HashMap<String, Object> ph = inMessage.getProtocolHeaders();
ph.put("$http_protocol", "http");
ph.put("$tip_protocol", "HTTP/1.1");
ph.put("$tip_method", "POST");
ph.put("$tip_timeout", 200000);
ph.put("Cache-Control", "no-cache");
ph.put("Content-Length", "0");
ph.put("Accept-Encoding", "gzip,deflate,br");
ph.put("$tip_restful", false);

builder.setProtocolHeaders(ph);

ITipMessagePayload message = builder.build();
context.outMessage = message;

# 方案二:使用 Java 图元赋值

  1. 在脚本中打印异常信息,例如:"接口异常了";
  2. 在 Java 图元 中构建响应报文,并赋值给 context.outMessage,如下图所示:

← 新增角色或账号问题排查