运行原理

介绍Biz-SIP业务中台主要场景的运行机制。

一、系统运行机制概述

1 系统架构

image.png

上图中:

  • 蓝色虚框所呈现的部分,主要是Biz-SIP中间件的配置文件。
  • 蓝底黑字所呈现的部分,表示是需要Java代码开发的,涉及适配层、应用层和领域层。
  • 蓝色虚箭头线所涉及的接口,就是不同层次之间需要互相依赖的接口定义。

整个Biz-SIP中间件系统主要包括:

  • Source层(对应于DDD架构中的适配接入层):负责聚合服务的接入,包括通讯协议适配和消息格式转换,并统一接入App层的App服务。
  • App层(对应于DDD架构中的应用层):负责服务的整合和编排,对Source层接入的服务,进行服务编排,并通过Sink模块接入要编排的服务。
  • Sink层(对应于DDD架构中的领域层):统一被App服务所调用,实现业务逻辑的处理,或接入外部第三方服务,包括和外部服务对接时的通讯协议适配和消息格式转换。

2 运行流程

Biz-SIP中间件调用服务的一个完整运行流程如下:

二、Source层

1 功能介绍

适配层Source模块主要是对接外部和系统内部其它系统的服务接入。
主要功能主要有:

  • 通讯协议的对接:服务接入模块(Source)负责外部调用方服务的通讯接入;
  • 消息转换:把外部多种消息格式,转换成平台内部通过的JSON标准消息报文类型;
  • 调用应用层的App模块进行服务编排。

并根据Source端定义的消息类型,调用消息类型所对应的消息转换器(Source Converter),转换器负责进行消息的格式转换,支持XML、JSON、定长、有分隔符、8583等报文的解包和打包。

2 运行流程

2.1 Source层采用通讯适配模板

2.2 Source层不采用通讯适配模板

2.3 Source层不调用格式转换器

2.5 OpenAPI接入

三、App层

1 功能介绍


App服务整合器主要是对聚合服务进行内部服务和外部服务的编排处理,系统架构上支持多种模式的服务整合器,目前支持服务聚合编排模式包括:

  • 基于Script脚本的服务编排:通过编写类JavaScript的脚本文件,来实现领域层服务的聚合和编排;
  • 基于Java代码开发的服务编排:开发人员通过Java代码的编写,实现领域层服务的编排,支持2种类型的Java服务类:
    • app-bean-service接口服务类:app-bean-service通过实现统一的接口来实现服务编排。
    • bean-service接口服务类:bean-service提供更为灵活的接口定义来实现服务编排。
  • 领域层服务的直接透传:通过配置sink-service,可以快速把领域层sink服务透传发布到前端的适配层source和OpenAPI接口。

2 调用接口

App模块对外提供标准API接口接入,接口规范如下:

URL http://{地址}:{端口}/api
HTTP请求头

- Content-Type
application/json

- Biz-Service-Id
调用的聚合服务ID
提交方式 POST
请求包 JSON报文
响应包 Biz-SIP内部标准消息(参见“Biz-SIP内部标准消息规范”)

3 运行流程

3.1 App层采用bean-service和app-bean-service

3.2 App层采用sink-service

3.3 App层调用延迟服务


延迟服务主要用于Saga分布式事务和SAF存储转发的处理,主要场景有:

  1. 重试通知:通知对方系统,直到对方给出明确的回复响应。
  2. 向前补偿:调用第三方服务后,超时没有响应,系统会后续发起查询上笔交易状态的查询交易,根据查询交易状态来决定继续完成后续服务步骤还是对以前服务步骤发起补偿(冲正)操作。
  3. 向后补偿:调用第三方服务后,超时没有响应,系统会立即发起针对此交易的补偿交易,补偿成功后,会对以前服务步骤依次发起补偿(冲正)操作;如果补偿失败,会置交易失败,由人工介入处理。

以上这几种事务场景,都是调用延迟服务的方式来实现的,调用方式主要有二种:

  • Script脚本中调用:在脚本中通过“sip.doDelayService()”调用来实现。
  • Java调用:通过“AppClientFactor.getDelayAppServiceClient()”获得延迟服务调用句柄,来进行延迟服务的调用。

以Java调用为例,针对延迟服务的执行流程,如下图所示:

image.png

  1. 适配层调用App模块后,会执行指定的App服务;
  2. 在Java编写的聚合服务中,会首先约定一个聚合服务调用的接口xxxDelayInterface,会声明接口类型、调用延迟间隔时间和调用次数;
  3. 在Java编写的服务中,可以通过前面声明的xxxDelayInterface接口,发起延迟服务的调用;
  4. 发起延迟消息后,在平台内部实现机制上,是通过发送RabbitMQ延迟消息的方式来实现的;
  5. 事务管理器在延迟服务接口约定的延迟时间后,会收到RabbitMQ消息,调起聚合服务(子服务)的处理;
  6. 如果执行成功,则延迟服务顺利完成,父服务和子服务都标记为成功;
  7. 如果在执行中抛出BizResultEnum.RETRY_DELAY_APP_SERVICE枚举的BizException异常,则会结束当前延迟服务,等待延迟服务的再次唤起;
  8. 如果在执行中抛出其它BizException异常,则会结束当前延迟服务,标记父服务和子服务为失败,等待人工后续处理;
  9. 延迟服务唤起次数超限,也会会结束当前延迟服务,标记父服务和子服务为失败,等待人工后续处理。

四、领域层Sink模块

1 功能介绍

Sink服务功能主要有二种:

  • 一种是对接第三方应用;
  • 另一种是领域层的交易处理模块。

Sink服务的调用类型也主要是二种:

  • rest:采用微服务RESTful接口,是采用同步调用的方式;
  • rabbitmq:采用RabbitMQ中间件异步调用的方式。

Sink服务的功能主要是二个:

  • 通讯协议的对接:Sink Connect负责和调用系统的通讯对接,支持微服务、消息中间件、TCP长短连接等多种接入方式;
  • 消息格式的转换:Sink Converter负责调用服务消息的格式转换,支持XML、JSON、定长、有分隔符、8583等报文。

Sink服务的处理方式主要有三种:

  • default:采用缺省的、无代码开发的的处理方式;
  • sink-bean:通过编写继承平台约定sink-bean接口(SinkBeanInterface)的Java类来进行处理;
  • bean:通过编写自定义接口的Java类来进行处理。

2 运行流程

2.1 Sink层rest服务的处理

2.2 Sink层rabbitmq服务的处理

2.3 Sink层bean、sink-bean类型服务的处理

2.4 Sink层default类型服务的处理

2.5 Sink层服务调用格式转换器和通讯适配器的处理


上一页
下一页