Biz-SIP业务中台案例实战(14)——Sink服务调用Netty通讯适配器

发布一下 0 0

Biz-SIP金融级业务中台(http://bizsip.bizmda.com)是一套基于领域驱动设计(DDD)架构,能快速构建金融级云原生架构的服务整合中间件,整合了在金融场景里锤炼出来的最佳实践。

Biz-SIP业务中台支持多种连接方式的通讯适配器(Connector),包括TCP、RabbitMQ、HTTP、调用Spring服务等通讯适配方式。

Netty Connector作为Sink服务可以调用的通讯适配器,能实现基于Netty同步短连接连接TCP服务端。

本节案例中是在Sink服务中,通过Netty Connector实现和TCP服务端(通过netcat来模拟服务端侦听并返回响应)的通讯交互:

Biz-SIP业务中台案例实战(14)——Sink服务调用Netty通讯适配器

其中,App层是通过Sink透传App服务,直接让调用方通过OpenAPI接口调用Sink服务(netty-sink),Sink服务调用simple-json类型的格式转换器,把平台内部标准格式(JSONObject对象,内部即JSON报文)简单打包成JSON报文,传给netty类型通讯适配器(Connector),和netcat来模拟的TCP服务端进行通讯交互,返回后再把JSON报文解包成平台内部标准格式返回。

具体代码和配置可以查看Biz-SIP源代码中的Sample相关测试案例(https://gitee.com/szhengye/biz-sip)

一、Sink层Sink服务的开发和配置

首先,在Biz-SIP配置目录的sink.yml中,配置对应的Sink服务:

- id: netty-sink  type: rest  url: http://bizsip-sample-sink/netty-sink  converter:    type: simple-json  connector:    type: netty    host: 127.0.0.1    port: 10010

可以看到netty-sink这个Sink服务,connector类型为netty,并设置了相关参数(host为TCP服务端地址,port为TCP服务端侦听端口)。格式转换器converter,设置为“type: simple-json”,采用最简单解包打包机制(直接打包成JSON,并对JSON直接解包成平台内部标准报文)。

这个Sink服务没有设置processor属性,即为缺省default类型,采用默认的缺省Sink服务流程来处理的,处理步骤依次为:

  1. 调用格式转换器converter对传入报文进行打包;
  2. 对上步打包后的报文作为调用请求报文,调用通讯适配器connector进行处理,并收到并返回响应报文;
  3. 调用格式转换器converter对响应报文进行解包,并返回解包后的报文。

最后,还需要在SampleSinkApplication的应用配置文件application-local.yml中,在bizsip.sink-id配置项中,增加netty-sink以便启动Sink服务:

bizsip:  config-path: /var/bizsip/config  sink-id: hello-sink,echo-sink,simple-xml-sink,velocity-json-sink,velocity-xml-sink,fixed-length-sink,velocity-split-sink,iso-8583-sink,sample17-sink,netty-sink

二、App层App服务的开发和配置

对于Sink透传App服务,只需要在app.yml中配置即可:

- app-service-id: /sink/netty-sink  type: sink-service  sink-id: netty-sink

可以看到在app.yml中,配置了App服务“/sink/netty-sink”,类型为Sink透传App服务(sink-service),透传调用的Sink服务为“netty-sink”。

三、启动应用进行测试

启动SampleSinkApplication、SampleAppApplication应用。

首先启动netcat模拟TCP服务端,在10010端口进行侦听,收到请求后,返回响应报文为'{"accountName": "王五","balance": 500,"accountNo":"xxx"}':

$ echo '{"accountName": "王五","balance": 500,"accountNo":"xxx"}'|nc -l 10010

通过OpenAPI接口进行测试:

$ curl -H "Content-Type:application/json" -H "Biz-Service-Id:/sink/netty-sink" -X POST --data '{"accountNo":"999"}' http://localhost:8888/api|jq{  "code": 0,  "message": "success",  "extMessage": null,  "appServiceId": "/sink/netty-sink",  "traceId": "88d6f7ce203d412b9e207ce7a808f856",  "parentTraceId": null,  "timestamp": 1647869711539,  "data": {    "accountName": "王五",    "balance": 500,    "accountNo": "xxx"  }}

可以看到返回报文中data域,即为TCP服务端通过echo命令返回的字符串'{"accountName": "王五","balance": 500,"accountNo":"xxx"}'。

Biz-SIP网站:http://bizsip.bizmda.com
Gitee代码库:https://gitee.com/szhengye/biz-sip

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/78793.html