找回密码
 加入怎通
查看: 181|回复: 0

Biz-SIP业务中台案例实战(13)——Source调用格式转换器Converter(业务中台方案介绍ppt)

[复制链接]
我来看看 发表于 2023-03-20 20:41:48 | 显示全部楼层 |阅读模式
0 a/ S# V7 o. ?/ S1 k

Biz-SIP金融级业务中台(http://bizsip.bizmda.com)是一套基于领域驱动设计(DDD)架构,能快速构建金融级云原生架构的服务整合中间件,整合了在金融场景里锤炼出来的最佳实践Biz-SIP业务中台支持多种报文类型的格式转换器(Converter),包括XML、JSON、定长、有分隔符、ISO-8583等报文类型的解包和打包。

3 f9 d5 t6 ^ `5 v

在Source模块中,可以通过Java API接口调用Converter,在Source模块代码中实现报文解包和打包本节案例中是在通过RestController接入的Source模块代码中,通过Java API调用模板XML格式转换器(simple-xml),实现XML报文的打包和解包:。

3 m9 d5 u$ g* E4 l" E/ Z

SampleSource4Controller是一个RestController,通过RESTful接受XML报文请求后,通过调用格式转换器Converter进行报文解包成平台标准JSON报文,然后调用App服务。

# ?! q8 W3 O9 ?- E' k, e

App服务(/bean/sample1)对输入报文没有做任何修改,是直接把原报文返回的SampleSource4Controller在收到App服务返回报文后,会再调用格式转换器进行报文打包成XML报文,作为RESTful请求的响应返回。

" [; S/ g, s) S4 b

具体代码和配置可以查看Biz-SIP源代码中的Sample相关测试案例(https://gitee.com/szhengye/biz-sip)一、Source层Source服务的开发和配置首先,在Biz-SIP配置目录的source.yml中,配置对应的Source:

+ g& ?+ w1 }7 }

-id:source4converter:type:simple-xml可以看到source4这个Source,格式转换器converter,设置为“type: simple-xml”,表示是采用基于简单XML格式转换器。

* I& V2 N1 c9 Q( J: Y8 X* Q9 v

SampleSource4Controller是一个RestController,负责外部调用的接入,相关代码如下:@Slf4j@RestControllerpublicclassSampleSource4Controller

; U e% i- H P9 N9 `9 y0 o

{ ( S! {9 I; q- E2 E: ^+ s2 d private Converter converter = Converter.getSourceConverter("source4"); " ^% f w1 D5 D* P private BizMessageInterface appInterface = SourceClientFactory% P; o3 A0 a) ~# M5 K) v0 X0 o .getAppServiceClient(BizMessageInterface

4 H- z- R* P( K1 J7 E6 p5 d

.class,"/bean/sample1");@PostMapping(value = "/source4", consumes = "application/xml", produces = "application/xml"

9 U( p0 M9 e) Y5 Z% Z

)public Object doService(@RequestBody String inMessage, HttpServletResponse response) { 8 {. ?2 L7 _, h BizMessage outMessage =

9 }/ h8 x. F& j6 o" e, W$ x

null; + k* b3 W1 M4 I+ s4 }& W( S try {. A# L; R$ [ {* Y$ K, I3 v JSONObject jsonObject = this.converter.unpack(inMessage.getBytes());/ N* D9 L5 h* u, Y' P log.debug(

3 y8 }' j9 q* ?' q# P% |

"解包后消息:\n{}", BizUtils.buildJsonLog(jsonObject));! R* p6 o( F1 J7 j BizMessage bizMessage = this

1 U1 I% z& S' _" a9 K+ f7 |- ~

.appInterface.call(jsonObject); 0 f: b) \. o9 n7 p8 W log.debug("调用服务返回消息:\n{}",BizUtils.buildBizMessageLog(bizMessage)); 4 \- K9 f: Y {: {' J byte[] outData =

+ G n; P8 H4 s

this.converter.pack(bizMessage.getData()); 3 Q* z5 j. M9 k% w: j log.debug("打包后消息:\n{}",BizUtils.buildHexLog(outData)); ?( ^6 g9 S1 r6 o

; @. d8 N" n7 j' n5 A

return new String(outData); 8 r7 x, G. l, s. }% X- p6 s } catch (BizException e) {9 K5 G S) U( k, Z, j( X1 U, @ return"Source API执行出错:"; m; Z; d! ~: v" R+ I/ i. ~" C8 E/ _ +

+ J1 b, n2 P F7 C, L+ T* ]3 [7 S

"\ncode:" + e.getCode() 7 ~* k0 z4 N5 [' D# d! Q + "\nmessage:" + e.getMessage()/ ]0 ?# u7 ]4 y + "\nextMessage:"

* _8 `6 n3 Q4 l4 n& a

+ e.getExtMessage(); 5 e- O- y: P# w0 f A8 V+ G }" g& G+ i+ [1 h, V+ v. f }, z. M! S7 W7 Y* W$ L+ K$ O }可以看到SampleSource4Controller类实现了“/source4”的URL接口,申明了和source.yml中的source4所绑定的格式转换器——converter,以及调用“/bean/sample1”App服务的调用接口——appInterface。

+ z( E5 c }! n9 m, \" `

在doService()方法中,主要有以下处理步骤:调用this.converter.unpack(),对传入的XML报文进行解包;把打包后的XML报文,通过this.appInterface.call()方法调用App服务;

2 G% z" |/ Z9 H: m- J- \

调用this.converter.pack(),把调用App服务返回的报文打包成XML报文返回二、App层App服务的开发和配置App服务,是采用《Biz-SIP业务中台案例实战(1)——开发最简单的App服务》一节中介绍的“/bean/sample1”,这个App服务是收到请求后,不做任何处理,直接把请求返回。

. Q" Q! h L' M9 j" p4 M

具体的app.yml配置和相关的Sample1AppService类代码,这里就不再细述,具体参考前面的介绍三、启动应用进行测试启动SampleSourceApplication、SampleAppApplication应用,通过curl发起测试报文:

- s( k6 w3 e5 ?$ e1 C

$ curl -H "Content-Type:application/xml" -X POST --data

( N8 d9 c x, @

王五500005 http://localhost:8080/source41 j4 k" t: q' }% x $ \8 @7 R4 H5 U5 H/ L6 q

8 H# t1 I) K( ~8 p& o/ I+ \6 a' E

王五500

" N# x& w3 ^4 I8 I7 B: G3 s/ I

005shizhengyedeMacBooSampleSourceApplication应用打印日志:[bizsip-sample-source:192.169.1.107:8080]

1 G' k' a7 ]- L* Y4 a

12:54:52DEBUG8409[][http-nio-8080-exec-1]c.b.b.s.s.c.SampleSource4Controller解包后消息:{"accountName":"王五"

' j& [; [& F; m2 q, a2 E$ B

,"balance":500,"accountNo":"005"}[bizsip-sample-source:192.169.1.107:8080]12:54:52DEBUG8409[][http-nio-8080-exec-1]

; N! M" x1 f$ j4 }5 h

c.b.b.source.api.AppServiceClientMethod调用App服务:/bean/sample1[bizsip-sample-source:192.169.1.107:8080]

6 A: i- ~9 L, J2 ?! X; R

12:54:52TRACE8409[][http-nio-8080-exec-1]c.b.b.source.api.AppServiceClientMethod调用App服务请求报文:{"accountName":

9 {0 Q# W2 }! T( |$ m. w/ z

"王五","balance":500,"accountNo":"005"}[bizsip-sample-source:192.169.1.107:8080]12:54:53DEBUG8409[][nioEventLoopGroup-2-1]

* E+ ]8 P3 }* h2 F7 Y/ T" m( _* S

c.b.b.s.s.l.NettyClientHandler写空闲超时,发送心跳检测包![bizsip-sample-source:192.169.1.107:8080]12:54:53TRACE8409

- i8 F1 Q+ A% O1 E2 p/ g

[e1fd243478df4f119d6c3cfa5f615671][http-nio-8080-exec-1]c.b.b.source.api.AppServiceClientMethodApp服务响应报文:

[6 h: L& M2 [7 f4 S! ?

traceId:e1fd243478df4f119d6c3cfa5f615671appServiceId:/bean/sample1code:0message:success{"accountName":

9 D- M' ~" W! B

"王五","balance":500,"accountNo":"005"}[bizsip-sample-source:192.169.1.107:8080]12:54:53DEBUG8409[e1fd243478df4f119d6c3cfa5f615671]

* {& I" ~$ g) @3 ~

[http-nio-8080-exec-1]c.b.b.s.s.c.SampleSource4Controller调用服务返回消息:traceId:e1fd243478df4f119d6c3cfa5f615671

2 \$ S( V! c/ p: B! ]

appServiceId:/bean/sample1code:0message:success{"accountName":"王五","balance":500,"accountNo":"005"}[bizsip-sample-source:192.169.1.107:8080]

$ E; w! J7 e# ^' u* E$ P

12:54:53DEBUG8409[e1fd243478df4f119d6c3cfa5f615671][http-nio-8080-exec-1]c.b.b.s.s.c.SampleSource4Controller

& u9 I* ` K6 P0 b& g

打包后消息:====+01-02-03-04-05-06-07-08-09-10-11-12-13-14-15-16-17-18-19-20+======ASCII======+0000:3C3F786D

% f- t; E* C5 g

6C2076657273696F6E3D22312E302220| |: k# n5 U, F, y 0060: 3C 61 63 63 6F 75 6E 74 4E 61 6D 65 3E E7 8E 8B E4 BA 94 3C | 王.五.500005............ |

1 {# P' c; Q, N9 h3 Z1 @" ?/ O

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

4 C6 F8 w" z' o7 o" G# L6 I; o8 Q9 u4 U' T' G% h9 M , V. C" z {5 E# N0 D9 _- k: E7 l- A 9 _1 u+ f i/ p% s
回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-7-7 13:07 , Processed in 0.074144 second(s), 51 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表