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

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

[复制链接]
我来看看 发表于 2023-03-20 20:41:48 | 显示全部楼层 |阅读模式
" Y& K# l7 [+ Y2 Y2 x4 u3 Y7 t

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

3 O: u/ Z$ c& I( D

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

* {) F0 z3 K. l, M' S

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

" x8 w4 C$ d+ g) f# Q' b

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

% n, q; R; u* `+ Q& @

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

0 q$ f/ i9 \- ` W. n

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

) s) z& ?! L3 Q" u$ u' f

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

8 H+ S& M! J/ C8 e6 x' _

{# y4 [. g4 e# B# [ private Converter converter = Converter.getSourceConverter("source4");/ l% m" g4 f% i) ^2 g$ {% ^ private BizMessageInterface appInterface = SourceClientFactory ; f; R0 t7 u) P .getAppServiceClient(BizMessageInterface

# P6 b8 l: Y3 c3 S6 ?

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

g% @( G- N* M' W2 e7 q6 Q

)public Object doService(@RequestBody String inMessage, HttpServletResponse response) { ; R- n6 t: z: T! f8 f. U3 x BizMessage outMessage =

) y- V# I, X7 |) R) B, I

null; 2 ], M. q8 k W# f- l try {6 M9 h5 `8 V6 z% Z; D# t JSONObject jsonObject = this.converter.unpack(inMessage.getBytes()); : M- _3 ~9 j+ R5 k log.debug(

4 [, e# P, F& z. C

"解包后消息:\n{}", BizUtils.buildJsonLog(jsonObject)); / p7 C. G# D& b) w4 q BizMessage bizMessage = this

. i; I6 B2 e3 l# B. I+ @+ d

.appInterface.call(jsonObject); 6 \; _$ z- i/ f; L log.debug("调用服务返回消息:\n{}",BizUtils.buildBizMessageLog(bizMessage)); ! v' C8 h+ \( p8 ]$ ] byte[] outData =

, b2 x; L8 [4 k6 [' c0 Q

this.converter.pack(bizMessage.getData());2 k9 L, _8 J8 B; W log.debug("打包后消息:\n{}",BizUtils.buildHexLog(outData));! T( W% B$ p, F$ W0 F( r

1 O- b7 I- R3 ~# L1 d- j

return new String(outData); : N* \3 [% m" `+ P' [2 T } catch (BizException e) { ) t+ Q( J1 d* l8 @" n, W# Z& k return"Source API执行出错:" 4 x0 p3 L) m+ N- H +

" H9 L5 V, a7 C; e9 [

"\ncode:" + e.getCode() 4 d( j; ]: _! m* U( P& G4 G3 c6 T$ { + "\nmessage:" + e.getMessage()$ V$ [6 M+ M B! ?5 W+ ^ + "\nextMessage:"

, g; Y4 }$ E; z& S% a; G( m: b) H

+ e.getExtMessage();5 a q7 l1 I S+ c' K* { } / d8 D9 W5 i0 M. n: b }0 I& j/ r% f5 d& ?& O }可以看到SampleSource4Controller类实现了“/source4”的URL接口,申明了和source.yml中的source4所绑定的格式转换器——converter,以及调用“/bean/sample1”App服务的调用接口——appInterface。

2 z4 K) b4 X$ n H& \/ @% n; A5 ~/ W

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

4 \0 p) J U' r2 Z, P8 ~8 |

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

( g0 c0 t: E W* g) I* D+ C

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

6 e8 W2 l( v0 i5 Y3 D

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

* I) Q* L5 j3 }# b

王五500005 http://localhost:8080/source4 ! d3 S0 s* K) p' }* W' B9 I+ o {8 }& w; ]. W

: H0 `2 v& E$ `0 U; B

王五500

L ^* k. K* m

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

: g* P: m6 w9 o& a

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

1 s' G u9 \. H" K* R& i

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

$ ]- U. r9 G* A% N) j# U- C

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

$ T3 i; ?; E4 i u' F U; g: Y

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

, \9 p) V& z% z1 @& V

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

9 v- X* o0 N; i4 Y! C" [6 Z

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

) b2 }% e% [8 o1 {

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

/ G ?7 u; }, C4 f( ?% m

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

$ L2 z9 d! T2 m4 e

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

! |) J: \* x, v* E1 `. K$ |

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

, m) ]9 S. x% U/ }. e! k

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

' b- P/ a) D* y

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

& V! H$ |$ W1 V. V/ z$ H7 s, a; k

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

, Z+ U9 y/ X6 D' q9 n( }" o! F g

6C2076657273696F6E3D22312E302220| |; V& c5 j6 `0 e9 b1 ~; Q 0060: 3C 61 63 63 6F 75 6E 74 4E 61 6D 65 3E E7 8E 8B E4 BA 94 3C | 王.五.500005............ |

. _# X# J* U4 |: Z

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

3 ?: n0 a& G5 b* Q2 L$ V. N* j " c0 D4 g O. X* e* _ * n; w9 `) @" z% z, k1 Q# Z- k& k4 a( z3 Q) H( F ) b2 G! m( v! i
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-4-4 05:00 , Processed in 0.049592 second(s), 23 queries , Gzip On.

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

    Powered by Discuz! X3.5

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