§ 本文目标

通过学习本文,可以掌握网关通讯配置

通过网关通讯配置,服务平台会启动对应的通讯服务(如Http通讯服务、Socket通讯服务)用于接入外系统的通讯请求,报文拆包根据约定对报文进行拆包,将拆包结果以Map形式作为参数传入服务平台提供的服务,指定服务运行完成后以Map形式返回执行结果,报文组包根据约定将Map组包为客户端可识别的报文,最终由配置的通讯服务(HTTP或者Socket)返回

关注点:

  • 通讯接入和报文在IDE中配置
  • 通讯映射配置

§ 练习场景

配置http+XML的服务端

通过配置,服务端会起一个端口为7777的短连接服务端监听,接收HTTP通讯请求。采用URL映射策略,将URl为“/api/bsp/test”的http请求按配置的autoUnpack.mfd格式进行XML拆包,将拆包结果传入服务调用,本示例为实现了cn.com.yusys.yusp.bsp.workflow.IService接口的HelloWorldService.java服务类,之后将服务调用结果按照拼包格式msgfile.mfd拼出xml报文返回给请求端

§ 操作步骤

§ 设置通讯适配参数

新建统一网关工程,如下图所示

wg_01

选择 “统一网关”,点击下一步,如下图所示

wg_02

输入项目名称和项目描述,示例中输入为gateway,用户可以根据实际需求输入,点击“完成”按钮,即可完成网关工程的创建

在网关工程gateway的“公共定义”路径下,双击"通讯适配",打开“通讯适配”视图。如下图所示

wg_03

选中“接入适配器”,右键弹出下拉菜单,选择“新建短连接服务端接入适配器”,如下图所示

wg_04

选中点击之后,会弹出提示框,输入该适配器的名称,此处需填入英文,示例中默认输入“shortServerInAdapter,点击确认

wg_05

确认之后,会出现本接入适配器的详细参数配置信息框

wg_06

上图中,有*号的表示必输项,**“主机”**为主机地址,默认为“0.0.0.0”

端口”表示接入服务监听的端口

超时【毫秒】”表示超时时间,单位为毫秒,默认60秒

可接入的客户端IP地址” 表示允许接入的Ip地址范围,为空的话表示对接入Ip没有限制

地址复用”表示地址是否可复用,默认为false

线程池最大连接数” 表示接入服务的最大线程数,默认为10,一般情况下采用默认值即可,如请求的并发量较大,可适当调大本值

线程池最小连接数” 表示接入服务的最小线程数,默认为5,一般情况下才有默认值即可

通讯协议” 表明通讯类型,目前提供socket和http两种通讯类型,socket对应Socket通讯,http对应HTTP通讯;通讯协议为“http”时,需设置请求数据类型,即请求的编码类型,“请求方式”可选POST或者GET;通讯协议为“socket”时,“请求数据类型”和“请求方式”不可用

映射策略” 是通讯与报文的映射策略,用来映射请求和响应的报文模板,具体映射配置在“通讯映射”中配置,后面会有说明

目前提供三种映射策略,分别是报文头映射策略headStrategy、URL映射uriStrategy和默认映射defaultStrategy

报文头映射策略headStrategy主要用于Socket通讯,在报文前加入固定长度的交易ID来对标通讯映射中提到的mappingId,以实现对组解包报文模板和服务调用类型的映射;URL映射uriStrategy后者主要用于HTTP通讯,使用URL作为映射ID,实现报文及调用类型的映射;默认映射defaultStrategy是为中原银行定制的默认映射策略

本场景中配置为Http通讯,配置示例如下图所示,端口为“7777

wg_07

§ 配置请求及响应报文

请求报文和响应报文均涉及报文的拼拆,下面以请求报文为例进行说明

xml拼包报文配置如下示例如下:

在网关工程gateway的“公共定义”路径下,选择“报文管理”,右键出现下来菜单,依次选择“新建”,“新建报文文件”,如下图所示

wg_08

点击“新建报文文件”,弹出对话框,填报文名称,示例中填“msgfile”,如下图所示

wg_09

点击“完成”,即可打开报文编辑器,如下图所示

wg_10

上图中报文类型下拉菜单包括“01-XML”,“02-ISO8583”,“03-JSON”,"27-Object",本报文编辑器可配置此4种类型的报文,编码可选择包括“UTF-8”,“GBK”,“GB2312”,“GB18030” 4种编码类型

注:编码默认为GBK,用于国际化时使用,目前除XML数据格式外,一般都不需要选择其它编码,因此选择其它编码时需要慎重

不同的报文类型,它所含有的报文参数不同,里面字段的参数也是不一样的

wg_11

wg_12

示例选择XML报文和UTF-8编码,下面开始添加报文字段,如下图所示,选择“报文”,右键“新建子节点”-》“字段”

wg_13

本例配置xml原始报文如下:

wg_14

报文类型选01-XML,编码选需要的字符集编码,本例中使用UTF-8。拼XML声明选true。如下图:

wg_15

步骤:

  1. 右键点击“报文”,选择“分组”,在分组名称中键入:HTTPSnapshot,新建报文根节点<HTTPSnapshot>标签
  2. 再右键根节点<HTTPSnapshot>选择“字段”,在字段名称中键入:id,字段类型选择“String”,在拼包表达式[g1] 或字段默认[g2] 输入框中输入属性值:"1111",字段参数中的字段类型 选择“属性”,新建[id]属性
  3. 再右键根节点<HTTPSnapshot>选择“字段”,在字段名称中键入:xsd,字段类型选择“String”,在拼包表达式或字段默认输入框中输入命名空间值:"http://www.w3.org/2001/XMLSchema",字段参数中的字段类型 选择“命名空间[g3] ”,字段参数中的字段路径填写命名空间前缀:xml,新建[xsd]命名空间
  4. 再右键根节点<HTTPSnapshot>选择“字段”,在字段名称中键入:defaultNamespace,字段类型选择“String”,在拼包表达式或字段默认输入框中输入缺省名空间值:"http://www.w3.org/2001/XMLSchema-instance",字段参数中的字段类型 选择“缺省名空间[g4] ”,新建缺省名空间
  5. 再右键根节点<HTTPSnapshot>选择“字段”,在字段名称中键入:value,字段类型选择“String”,在拼包表达式或字段默认输入框中输入值:"测试",字段参数中的字段类型 选择“值”,新建[value]值
  6. 再右键根节点<HTTPSnapshot>选择分组,在分组名称中键入:HTTPTask,新建子节点<HTTPTask>标签
  7. 重复步骤2,在<HTTPTask>标签中新建[connectionId](值为"43")、[frame](值为"1")、[hostname](值为"192.168.251.138")、[ip](值为"192.168.251.138")、[origin](值为"Primary")、[path](值为"/cmis/getLcMtdDtl.do?EMP_SID=FFBLHRAJGIGBBSATCMEBDSIIGQIXEEGVETIYDRIT")、[port](值为"10000")、[startTime](值为"76890615")和[url](值为"http://192.168.251.138:10000/cmis/getLcMtdDtl.do?EMP_SID=FFBLHRAJGIGBBSATCMEBDSIIGQIXEEGVETIYDRIT")属性
  8. 再右键子节点<HTTPTask>选择“字段”,在字段名称中键入:cdata,字段类型选择“String”,在拼包表达式或字段默认输入框中输入值:"76890833",字段参数中的字段类型选择“CDATA”,新建[cdata]CDATA
  9. 再右键子节点<HTTPTask>选择分组,在分组名称中键入:Body,新建子节点<Body>标签
  10. 再右键子节点<Body>选择循环,在循环名称中键入:TestList,循环变量键入:i,循环次数[g5] 键入:2,新建子节点<TestList>标签
  11. 再右键子节点<TestList>选择分组,在分组名称中键入:TestName,新建子节点<TestName>标签
  12. 重复步骤5,新建子节点<value>

配置结果如下图:

wg_16

上面报文配置步骤中出现的名词 备注

  • 拼包表达式指在上下文中变量名,亦可填常量值,常量值需用双引号
  • 字段默认与拼包表达式皆有值可用时,优先使用拼包表达式
  • 字段默认是指字段的默认值,既字段拼包表达式未填写或值为NULL时,字段使用默认值填充拼包。支持上下文变量填写与常量值填写
  • 命名空间,前缀固定为xmlns,后缀在字段参数的字段路径中自定义
  • 缺省名空间值,命名空间为"xmlns",命名空间无后缀
  • 循环次数,支持变量,支持.size()调用

xml拆包配置说明

因为XML报文是自描述性报文格式,报文中包含字段名和值,所以可以使用自动拆包,避免繁琐的配置手动拆包报文格式

报文类型选01-XML,编码选需要的字符集编码,本例中使用UTF-8。自动拆包选择:“true”。如下图

wg_17

§ 配置要调用的Service服务

gateway工程的业务逻辑下,右键新建类,实现cn.com.yusys.yusp.bsp.workflow.IService接口,示例创建的类为HelloWorldService.java

wg_18

HelloWorldService.java内容示例如下,本serviceId为“hello

wg_19

§ 配置通讯映射

在gateway工程的“公共定义”下,双击“通讯映射”,打开通讯映射配置

wg_20

在通讯映射页面,通讯映射ID选中在第一步创建的通讯适配器ID,交易ID填入 “/api/bsp/test”(此处使用的为URL映射),拆包报文文件和拼包报文文件通过“选择报文”分别选中前面步骤中配置的autoUnpack.mfd和msgfile.mfd文件,调用类型选择“service”,beanId填入上一步创建的service的Id “hello”,最后点击下面的“新增”按钮,将映射信息保存

wg_21

至此,所有配置完毕

§ 测试网关通讯配置

启动注册中心服务和网关gateway工程,启动成功之后,用下面的方法向网关发送请求,端口7777为上面设置的服务端接入适配器设置的监听端口

wg_22

会收到响应

wg_23

gateway工程的日志为

wg_24

wg_25

§ 示例工程

附上工程代码

gateway.rar

测试类URLTest及test.xml文件均已放在工程中

备注:运行示例时,需先启动注册中心及UAA工程

最后更新于: 5/5/2022, 6:41:08 PM