§ 本文目标
通过学习本文,可以掌握网关通讯配置
通过网关通讯配置,服务平台会启动对应的通讯服务(如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报文返回给请求端
§ 操作步骤
§ 设置通讯适配参数
新建统一网关工程,如下图所示

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

输入项目名称和项目描述,示例中输入为gateway,用户可以根据实际需求输入,点击“完成”按钮,即可完成网关工程的创建
在网关工程gateway的“公共定义”路径下,双击"通讯适配",打开“通讯适配”视图。如下图所示

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

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

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

上图中,有*号的表示必输项,**“主机”**为主机地址,默认为“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”

§ 配置请求及响应报文
请求报文和响应报文均涉及报文的拼拆,下面以请求报文为例进行说明
xml拼包报文配置如下示例如下:
在网关工程gateway的“公共定义”路径下,选择“报文管理”,右键出现下来菜单,依次选择“新建”,“新建报文文件”,如下图所示

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

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

上图中报文类型下拉菜单包括“01-XML”,“02-ISO8583”,“03-JSON”,"27-Object",本报文编辑器可配置此4种类型的报文,编码可选择包括“UTF-8”,“GBK”,“GB2312”,“GB18030” 4种编码类型
注:编码默认为GBK,用于国际化时使用,目前除XML数据格式外,一般都不需要选择其它编码,因此选择其它编码时需要慎重
不同的报文类型,它所含有的报文参数不同,里面字段的参数也是不一样的

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

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

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

步骤:
- 右键点击“报文”,选择“分组”,在分组名称中键入:HTTPSnapshot,新建报文根节点
<HTTPSnapshot>标签 - 再右键根节点
<HTTPSnapshot>选择“字段”,在字段名称中键入:id,字段类型选择“String”,在拼包表达式[g1] 或字段默认[g2] 输入框中输入属性值:"1111",字段参数中的字段类型 选择“属性”,新建[id]属性 - 再右键根节点
<HTTPSnapshot>选择“字段”,在字段名称中键入:xsd,字段类型选择“String”,在拼包表达式或字段默认输入框中输入命名空间值:"http://www.w3.org/2001/XMLSchema",字段参数中的字段类型 选择“命名空间[g3] ”,字段参数中的字段路径填写命名空间前缀:xml,新建[xsd]命名空间 - 再右键根节点
<HTTPSnapshot>选择“字段”,在字段名称中键入:defaultNamespace,字段类型选择“String”,在拼包表达式或字段默认输入框中输入缺省名空间值:"http://www.w3.org/2001/XMLSchema-instance",字段参数中的字段类型 选择“缺省名空间[g4] ”,新建缺省名空间 - 再右键根节点
<HTTPSnapshot>选择“字段”,在字段名称中键入:value,字段类型选择“String”,在拼包表达式或字段默认输入框中输入值:"测试",字段参数中的字段类型 选择“值”,新建[value]值 - 再右键根节点
<HTTPSnapshot>选择分组,在分组名称中键入:HTTPTask,新建子节点<HTTPTask>标签 - 重复步骤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")属性 - 再右键子节点
<HTTPTask>选择“字段”,在字段名称中键入:cdata,字段类型选择“String”,在拼包表达式或字段默认输入框中输入值:"76890833",字段参数中的字段类型选择“CDATA”,新建[cdata]CDATA - 再右键子节点
<HTTPTask>选择分组,在分组名称中键入:Body,新建子节点<Body>标签 - 再右键子节点
<Body>选择循环,在循环名称中键入:TestList,循环变量键入:i,循环次数[g5] 键入:2,新建子节点<TestList>标签 - 再右键子节点
<TestList>选择分组,在分组名称中键入:TestName,新建子节点<TestName>标签 - 重复步骤5,新建子节点
<value>值
配置结果如下图:

上面报文配置步骤中出现的名词 备注:
- 拼包表达式指在上下文中变量名,亦可填常量值,常量值需用双引号
- 字段默认与拼包表达式皆有值可用时,优先使用拼包表达式
- 字段默认是指字段的默认值,既字段拼包表达式未填写或值为NULL时,字段使用默认值填充拼包。支持上下文变量填写与常量值填写
- 命名空间,前缀固定为xmlns,后缀在字段参数的字段路径中自定义
- 缺省名空间值,命名空间为"xmlns",命名空间无后缀
- 循环次数,支持变量,支持.size()调用
xml拆包配置说明:
因为XML报文是自描述性报文格式,报文中包含字段名和值,所以可以使用自动拆包,避免繁琐的配置手动拆包报文格式
报文类型选01-XML,编码选需要的字符集编码,本例中使用UTF-8。自动拆包选择:“true”。如下图

§ 配置要调用的Service服务
在gateway工程的业务逻辑下,右键新建类,实现cn.com.yusys.yusp.bsp.workflow.IService接口,示例创建的类为HelloWorldService.java

HelloWorldService.java内容示例如下,本service的Id为“hello”

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

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

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

会收到响应

gateway工程的日志为


§ 示例工程
附上工程代码
gateway.rar
测试类URLTest及test.xml文件均已放在工程中
备注:运行示例时,需先启动注册中心及UAA工程