找回密码
 加入怎通
查看: 235|回复: 4

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

[复制链接]
我来看看 发表于 2023-03-20 20:41:48 | 显示全部楼层 |阅读模式
* x7 O" ^" `/ `$ b: w" F

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

) T0 l& c$ _! e% h9 I# s9 w p

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

6 R7 C' w9 L4 c3 ?) ^

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

" W2 \' I0 A, J; X

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

5 L! J a0 i D# F' C2 ]

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

# W0 ~/ k/ |, D( p4 y5 e% Z

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

* V& Z* `: p3 `0 O

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

; f, C2 I: f; S! v' e) o! q

{ : `) [; R7 Y, O# H4 ]. P) s7 s private Converter converter = Converter.getSourceConverter("source4");. h1 b/ Z) Z0 I- {- D5 e6 W# k/ w private BizMessageInterface appInterface = SourceClientFactory, M0 C0 V8 b1 g9 C2 Q3 C .getAppServiceClient(BizMessageInterface

! x& } e# q J+ z* k* D; O

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

; e( K! B, U( t, q+ V

)public Object doService(@RequestBody String inMessage, HttpServletResponse response) { " u6 E( R9 E+ W8 T0 ]5 X4 U7 I- U BizMessage outMessage =

: G( W4 l- H ]

null; 2 ^% K% g3 A2 q0 z# ^ E: ^ try { : z) ]* D* C9 g4 X3 F" ?- v JSONObject jsonObject = this.converter.unpack(inMessage.getBytes()); 2 o* p+ {/ y* n/ G log.debug(

8 B2 [% ~# B8 O3 a4 b

"解包后消息:\n{}", BizUtils.buildJsonLog(jsonObject));& F+ d4 W" K3 g9 H" W# [ BizMessage bizMessage = this

% i$ [; f+ ~% H6 e5 o. x$ I

.appInterface.call(jsonObject);4 c3 U% w# Q0 y# L log.debug("调用服务返回消息:\n{}",BizUtils.buildBizMessageLog(bizMessage)); ; @- x5 \! g2 X byte[] outData =

. r' R" Q$ E& i0 I4 a

this.converter.pack(bizMessage.getData());% A& ^: M. \+ y% e log.debug("打包后消息:\n{}",BizUtils.buildHexLog(outData)); % |3 V" o$ f4 u+ F; b

) b9 _. t' h2 m/ X- ?

return new String(outData); 1 P' h) `4 T" `6 h; _1 i. A T1 R: t } catch (BizException e) { 2 c% [4 a! d; m/ [1 V c return"Source API执行出错:"% R% W, t% A4 k% u. M +

! E; B- l- o. p

"\ncode:" + e.getCode()$ i( M L& ^. Y0 L + "\nmessage:" + e.getMessage()4 P# P7 ]% x- {# M2 h, r" E/ t + "\nextMessage:"

- [. J# e% d" M! o

+ e.getExtMessage();( _ O* `4 s. i# G* q( {, s } 3 ?/ [ o& b! q/ s4 T& B }3 _7 M: }( d- B. e }可以看到SampleSource4Controller类实现了“/source4”的URL接口,申明了和source.yml中的source4所绑定的格式转换器——converter,以及调用“/bean/sample1”App服务的调用接口——appInterface。

% L! k- v- R! V% f; Z9 o2 L

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

7 _* v+ y w( }7 `* U

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

" {) r h6 {" G

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

% ~9 v- |) W" R9 e

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

Q( ~* |$ J; W9 _6 ~7 o3 W, j9 O

王五500005 http://localhost:8080/source41 p4 \ K7 o% `9 g3 G : U) t( p9 h. J l7 p/ `

! a I# H) y; h1 ?' t* J) r( a1 v

王五500

! _% V' ~- T& k

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

8 X! W" a. d1 r+ [1 C- P& [! o

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

# f. u$ |$ q, t( B! C5 S3 ^3 T

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

( X1 U. d; N* V% C/ n, }) ]# h9 y0 k% r x

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

! T! E3 I1 [: V) }6 ~

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

( |3 G+ F, Q: f4 O" s) a

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

+ g+ W+ Q7 B2 a/ Y2 Q6 U

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

+ N* [! B1 A# o" b

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

6 x" S2 W9 i! `& s0 L' ] o! H& t/ S

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

1 Q+ Y' k, F# f- ~; N

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

& k: Y5 u# r1 l0 w

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

m. E! g% R1 w8 o3 r+ h

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

: q- Z- H- j8 c$ D7 y, u# h

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

/ e0 a) g5 q* a: g7 d7 K6 v

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

- h9 N3 D e# `) p! l

6C2076657273696F6E3D22312E302220| | ' B) M1 e3 x8 }; j' E1 T8 H 0060: 3C 61 63 63 6F 75 6E 74 4E 61 6D 65 3E E7 8E 8B E4 BA 94 3C | 王.五.500005............ |

- b* f6 H/ X+ T& Y$ P( f# q

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

2 ^0 r8 D) n1 Z1 w& O+ P Q9 C4 Q# S # u0 v3 I' C) B5 H( h# z ; o7 z7 p+ {( i6 M' X% l! `3 D# P& k4 y" y1 g# H3 q # h s& m7 S( S8 w) D

暂时无法加载帖子列表

回复

使用道具 举报

liziqing311 发表于 2026-07-07 13:07:44 | 显示全部楼层
这个思路很新颖,打开了新世界的大门,谢谢分享
回复

使用道具 举报

小卟点 发表于 2026-07-11 16:10:20 | 显示全部楼层
楼主太厉害了,整理得这么详细,必须支持
回复

使用道具 举报

医药电商 发表于 2026-07-16 16:48:00 | 显示全部楼层
说得很实在,没有夸大其词,这种真实分享太难得了
回复

使用道具 举报

别致滴小伙 发表于 2026-07-24 01:46:02 | 显示全部楼层
学习到了,之前一直没注意过这个点,受教了
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-10-1 09:04 , Processed in 0.037335 second(s), 25 queries , Gzip On.

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

    Powered by Discuz! X3.5

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