API文档

JavaDoc文档:链接

一、公共API接口

1. 平台标准消息报文-BizMessage

Biz-SIP平台内部时采用标准的消息报文格式:

参数 类型 是否必填 描述
code int Y 返回码,0为成功,非0为失败
message String N 返回消息
extMessage String N 返回扩展消息
appServiceId String Y 对应App服务ID
traceId char(32) Y 由Biz-SIP统一生成的唯一跟踪ID,每个聚合服务中traceId相同
parentTraceId char(32) N 父交易服务的traceId,父交易服务一般调用延迟服务,会产生子交易服务
timestamp long Y 由Biz-SIP统一生成的时间戳,为聚合服务的最初发起时间,为1970年1月1日零点整至发起时间的毫秒数
data String(JSON格式) N 传送的数据,一般为JSON格式

2. 平台工具类-BizUtils

主要包括各种数据在日志输出格式的优化,包括:

  • buildBizMessageLog():构建规范BizMessage对象日志文本
traceId: 839af23bc2bb4dc29b1f6eef278fa85c
appServiceId: /openapi/sample4
code: 0
message: success
{
    "accountName": "王五",
    "accountNo": "005"
}
  • buildHexLog():构建规范的字节流日志文本
====+ 01-02-03-04-05-06-07-08-09-10-11-12-13-14-15-16-17-18-19-20 + ====== ASCII  ====== +
0000: 7B 73 65 78 3A 22 E7 94 B7 22 2C 61 63 63 6F 75 6E 74 5F 6E | {sex:"男.",account_n |
0020: 6F 3A 22 30 30 35 22 2C 61 63 63 6F 75 6E 74 5F 6E 61 6D 65 | o:"005",account_name |
0040: 3A 22 E7 8E 8B E4 BA 94 22 7D                               | :"王.五."}.......... |
  • buildJsonLog():构建规范的JSON对象日志文本
{
    "sex": "0",
    "mobile": "18601872345",
    "accountNo": "62001818",
    "email": "123232@163.com"
}

3. 异常处理-BizException

BizException是平台应用异常,在开发时抛出异常,都要封装成BizException异常来抛出。
BizException中的code、message是错误码和错误信息,具体是在BizResultEnum类中定义的,code为1-1000为系统内部错误码,应用开发时的code应从1001开始使用。
其中BizResultEnum.RETRY_DELAY_APP_SERVICE枚举的BizException是App服务重试异常,App服务在抛出这个异常后,会自动触发延迟App服务的重试。

二、各层服务封装和调用

1. Source层

2.1. 调用服务接口类-SourceClientFactory

SourceClientFactory主要是对App服务的调用接口封装:

@RestController
@RequestMapping("/personal")
public class XmlController {
    // 定义一个接口为PersonalAppInterface的,app层服务名为/app/personal的服务调用句柄
    private PersonalAppInterface personalAppInterface = SourceClientFactory
            .getAppServiceClient(PersonalAppInterface.class,"/app/personal");
    ......
    @PostMapping(value = "/getCustomerAndAccountList", consumes = "application/xml", produces = "application/xml")
    public String getCustomerAndAccountList(@RequestBody String inMessage) throws BizException {
    		......
        // 调用app层服务
        CustomerAndAccountList customerAndAccountList = this.personalAppInterface.getCustomerAndAccountList(customerId);
        ......
}

2.2. Source服务接口类-SourceBeanInterface

在可复用的Source模块中,可以通过@Autowired进行注入引用,从而实现通用的Source通讯适配应用和个性化的Source服务代码分离的目标:

@RestController
public class RestSourceController {
    @Autowired
    private SourceBeanInterface restSourceService;

2. App层

2.1. 调用服务接口类-AppClientFactory

AppClientFactory类主要是针对Sink服务、App延迟服务的调用封装:

@Service
public class PersonalAppService implements PersonalAppInterface {
    private AccountSinkInterface accountSinkInterface = AppClientFactory
            .getSinkClient(AccountSinkInterface.class,"account-sink");
    private CustomerSinkInterface customerSinkInterface = AppClientFactory
            .getSinkClient(CustomerSinkInterface.class,"customer-sink");
    private BizMessageInterface payment1SinkInterface = AppClientFactory
            .getSinkClient(BizMessageInterface.class,"payment1-sink");
    private BizMessageInterface payment2SinkInterface = AppClientFactory
            .getSinkClient(BizMessageInterface.class,"payment2-sink");
    private PersonalAppInterface personalAppDelayInterface = AppClientFactory
            .getDelayAppServiceClient(PersonalAppInterface.class,"/app/personal",
                    0,1000,2000,4000,8000,16000,32000);

    @Override
    public CustomerAndAccountList getCustomerAndAccountList(String customerId) {
        Customer customer = this.customerSinkInterface.getCustomer(customerId);
        List<Account> accountList = this.accountSinkInterface.getAccountListByCustomerId(customerId);
        CustomerAndAccountList customerAndAccountList = new CustomerAndAccountList();
        customerAndAccountList.setCustomer(customer);
        customerAndAccountList.setAccountList(accountList);
        return customerAndAccountList;
    }

2.2. App服务接口类-AppBeanInterface

app-bean-service是App层基于平台标准JSON消息报文调用的服务类型,绑定的服务类是继承AppBeanInterface接口:

@Service
public class SampleAppBeanService implements AppBeanInterface {
    private HelloInterface helloInterface = AppClientFactory
            .getSinkClient(HelloInterface.class,"sample-bean-sink");

    @Override
    public JSONObject process(JSONObject jsonObject) throws BizException {
        String message = (String)jsonObject.get("message");
        jsonObject.set("message","sample-app-bean-service: Hello,"+message+";"
                + this.helloInterface.hello(message));
        return jsonObject;
    }
}

3. Sink层

3.1. Sink服务接口类-SinkBeanInterface

sink-bean是Sink层基于平台标准JSON消息报文调用的Sink服务类型,绑定的服务类是继承SinkBeanInterface接口:

@Service
public class SampleSinkBeanService implements SinkBeanInterface {
    @Override
    public JSONObject process(JSONObject packMessage) throws BizException {
        String message = (String)packMessage.get("message");
        packMessage.set("message","sample-sink-bean-sink: Hello,"+message);
        return packMessage;
    }
}

3.2. Sink服务抽象类-AbstractSinkService

如果sink-bean和bean服务类是继承AbstractSinkService类,当前sink的connector和converter是会自动注入的:

@Service
public class Payment1SinkService extends AbstractSinkService implements SinkBeanInterface {
    @Override
    public JSONObject process(JSONObject jsonObject) throws BizException {
        log.info("传入消息:\n{}", BizUtils.buildJsonLog(jsonObject));
        byte[] inBytes = this.converter.pack(jsonObject);
        log.info("打包后消息:\n{}", BizUtils.buildHexLog(inBytes));
        JSONObject outJsonObject = this.converter.unpack(inBytes);
        log.info("解包后消息:\n{}", BizUtils.buildJsonLog(outJsonObject));
        return outJsonObject;
    }
}

三、格式转换器和通讯适配器

1. 格式转换器-Converter

Converter可以在Source服务和Sink服务中进行引入和调用,其中在Sink服务中,如果sink-bean和bean服务类是继承AbstractSinkService类,当前sink的converter是会自动注入的。
开发者可以用Converter进行消息报文的解包和打包操作。

2. 通讯适配器-Connector

Connector只能在Sink服务中引入,如果sink-bean和bean服务类是继承AbstractSinkService类,当前sink的connector是会自动注入的。
调用connector类的process()方法,会自动根据配置的通讯适配参数,和对方进行通讯交互并返回。

上一页
下一页