在中介服务中,如果需要进行业务回调,希望回调地址可配置,可参考如下操作
示例Demo:dynamicCallbackAddress.zip
1.创建回调地址配置表,并配置好回调地址
回调地址需要在库中配置,回调地址的表名为:callback_address,以mysql为例,表结构如下:
CREATE TABLE CALLBACK_ADDRESS (
id int(11) NOT NULL AUTO_INCREMENT,
client_id varchar(128) NOT NULL,
operation_code varchar(128) NOT NULL,
ip varchar(128) DEFAULT NULL,
port varchar(10) DEFAULT NULL,
uri varchar(512) DEFAULT NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP,
update_time datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
字段及填写说明:
- id: 主键;
- client_id: 客户端id,必填;
- operation_code: OperationCode,必填;
- ip: 回调地址ip,必填;
- port: 回调地址port,必填;
- uri: 回调接口,必填;
- create_time: 记录创建时间;
- update_time: 记录更新时间;
回调地址配置示例:
2.开启动态地址配置监听器
找到Studio安装目录,进入到studio/server/EOS/_srv/config/system下,打开handler-startup.xml文件,将动态回调地址配置监听注释放开(如下图所示), 表示在server启动时,将callback_address表中数据加载到内存中,目的是在获取回调地址时,提高查询效率。
重启Server 创建好callback_address表并设置好回调地址, 将handler-startup.xml文件中的动态回调地址监听开启后,需要重启server,以保障配置的回调地址加载到内存中。 |
3.增加回调地址的依赖包
在服务编排中,获取回调地址的Java方法图元需要使用到com.primeton.esb.governance.service.policy-8.0.0.0.jar包,按下图将该包添加到依赖中
选择添加外部JAR之后,在弹出的选择框中,进入到Studio安装路径下:studio->server->plugin,选择com.primeton.esb.governance.service.policy-8.0.0.0.jar包,点击打开,再点击应用并关闭即可。
4.中介服务编排
4.1. http业务服务
在Endpoint中创建http类型的endpoint,如下所示:
在业务服务中创建http业务服务,选择上述创建好的endpoint,在URI中输入:/helloWorld,点击保存。
helloWorld业务服务如下,返回一个字符串:
在中介服务编辑面板空白处双击,弹出的中介流属性设置对话框中,变量定义列表中,新增businessOut变量,作为接收http业务服务的返回结果,变量类型为:ITMessagePayload
拖拽Http业务服务图元至右侧编辑面板,右键选择属性,在弹出的属性设置对话框中,业务服务框中,选择右测的浏览,选中上述创建好的http服务,确定之后 , 在下方的参数配置表中,返回值一栏,值列中,填入定义好的businessOut,作为返回值的接收参数。
使用连接线连接开始和http业务服务图元
4.2.获取回调地址Java方法图元
在空白处双击,弹出的中介流属性设置对话框中,变量定义列表中,新增address变量,作为获取回调地址返参的接收变量,类型为:HttpDynamicEndpointRef
将Java方法图元拖拽到右侧服务编辑区域,修改该图元名称为:获取回调地址,然后右键,选择属性,在弹出的设置属性界面中,点击选择java方法项右侧的浏览按钮。
点击浏览后在弹出选择类对话框中,输入框输入:DynamicCallbackAddressUtil,然后选择在下方匹配类,点击下一步,接着选中getDynamicCallbackAddress方法,然后点击完成即可。
点击完成后,在返参中,值列中输入:address,作为接收获取回调地址的返参。
4.3.设置回调地址
重要提示 获取回调地址的Java方法图元,最终返回的结果包含配置好的回调地址信息,因此调用回调服务时,用户需要根据实际需要,构造具体类型的ITipMessagePayload对象(如:WS类型,Http类型的ITipMessagePayload对象),做为回调服务的入参,并将回调地址设置到该对象中去。为了方便起见,示例以Http类型的服务做为回调服务。 |
如下图所示:在Java包中创建CallbackInfoHandler类,类中的setCallbackAddress方法接收三个入参,分别是获取回调地址Java方法图元的返回结果、 调用Http业务服务时的入参、Http业务服务的返回结果。该方法返回一个含有Http业务的结果,以及回到地址的ITipMessagePayload对象,该对象作为回调服务的入参。
实现好设置回调地址的类以及方法后,在编辑中介服务面板空白处双击,添加result变量,做为接收设置回调地址的Java图元的返参。
拖拽一个Java方法图元,并命名为设置回调地址,然后右键属性,在设置属性界面,选择java方法项的右侧,点击浏览,在弹出的设置对话框中,输入框输入:CallbackInfoHandler,选择下方匹配项
完成上述操作后,在Java方法属性对话框中,参数配置列表中,值列中,填入如下参数,作为设置回调地址方法的入参,以及接受的返参。
4.4.回调服务
创建http类型的回调服务,如下图所示:
callbackService回调服务将Http业务服务的返回值拿到,并将回调服务的结果组合一并返回,回调服务的实现如下:
在中介服务编排界面,拖拽一个http业务图元到右侧编辑面板,并重命名为回调服务,右键属性,在打开的属性设置对话框中,选择创建好的Http回到服务,并在参数列表中填入入参和返参。
使用连接线连接获取回调服务——设置回调地址——回调服务——结束
再使用连接线连接获取回调地址——结束,双击该连接线,在弹出的设置对话框中,填入条件判断,当回调地址的返回值address为空时,表示没有配置回调地址,此时直接结束。
最终的服务编排的流程图如下:
5.服务调用
编辑好中介服务后,进行服务调用。
5.1首先创建Http类型的代理服务,关联服务类型选择中介服务,如下图所示:
5.2.创建Http类型的Transport,如下图所示:
5.3.配置好Server后,点击按钮,启动服务,启动成功后,在Postman中输入:http://127.0.0.1:9090/server ,并在Headers中增加ClientId,OperationCode参数,该参数的值应和callback_address表中配置的值一致,点击send之后,将返回业务结果和回调服务结果,如下图所示: