FinTrade 交易总线SDK


  • administrators

    简介


    PLASMON SDK是PLASMON-streaming的专用开发工具, 目前已经支持并包含面向: java、 node.js 、golang 的开发包。使用PLASMON SDK以接入PLASMON总线,随之带来高并发低延时的消息即业务体验。

    基于SDK开发,使得构建诸如订单管理单元(OMS)、交易所直连单元(Line Handler)以及类似的业务单元时,具有更低的底层耦合,让任何业务单元都可以互不干扰地轻易接入PLASMON节点和实现自由编排,同时消息总线SDK还提供埋点和实时监控,灵活强大的API(Pattern based),核心快速的消息协议支持(FIX、Protobuf),高度自由可定制化的第三方协议和第三方消息处理,易于使用的可选RPC接口,本文以Java SDK为例,其他语言请查阅:node.js 、golang。


    下载和安装

    如果你的工程是Maven工程,可以通过引入以下依赖和maven install来下载和快速安装Java SDK,当然如果目标工程不是Maven工程也可以直接下载 MessagingJ.jar ,并引入自定义的通用工程:
    0_1535009933312_01.jpg

    除此之外,MessagingJ还需要使用相对于当前操作系统的动态链接库,请依据当前操作系统下载对应库的压缩文件并解压,之后设置环境变量:FINO_DYLIB 为该动态库文件的绝对路径。


    PLASMON消息中间件,顾名思义是以消息驱动的流处理中间件,在数据交互和交换时均以消息形式进行,在下载安装完毕后和正式接入并使用API来和PLASMON bus进行交互前,需要遵循PLASMON平台规范进行一些基本消息配置(topic、template、builder),以下从简单的topic开始。

    任何消息本身在整个PLASMON消息总线上是具有唯一标志的,它就是PLASMON subject,通过它,消息在整个broker链路和client间精准路由。当然,你不用亲自去产生它,只需要配置topic和与之相关的template,当你发送某个消息时,同时指定一个topic,SDK就会自动把消息对象根据配置该topic的template转换成相应的subject。

    消息Object在最终发送和接收窗口中需要被序列化为byte[],SDK允许用户自定义序列化和反序列化对过程,这就是消息builder。PLASMON SDK需要和推荐用户注册消息builder (如果没有注册,则按照java统一序列化.toString()和.newString()来处理和生成Object,因此发送的是业务消息本身而收到的只是该消息的序列化表示。

    如果已经注册过builder则调用builder来序列化和反序列化,这样发送和接收端均得到一个完整的业务Object,就完成了对象在整个broker链路的传递。一个用户可以同时注册很多消息builder,而某一个topic只能绑定一种builder)。builder本身就是消息的解码器和编码器,它是高度协议相关的,鉴于金融领域FIX协议和Protobuf协议拥有充足的业务支持,因此,SDK已经将FIX和Protobuf协议的消息builder内置在了开发kit中,用户只需要将定制化后的协议文件在对应builder中引入即可。接下来就逐步配置并使用。

    首先需要创建并使用一个PlasmonClient,并预先配置它,它有name和instance两个标志属性,配置文件则为: name.instance.yaml
    0_1535081960361_02.jpg

    以上就是所有配置(如果不需要动态template,可以不添置花括号和^),接下来可以使用这个配置文件并创建对应的PlasmonClient,现在就可以进行简单的publish和subscribe
    0_1535082581634_03.jpg

    除了常见的publish和subscribe之外,为了保障消息的可靠和补偿,PLASMON总线可以接入标准cache server,如果接入了PLASMON cache server后并且配套有PLASMON monitor server,那么作为扩展kit的一部分,SDK允许PlasmonClient进行.query()和.queryAndSubscribe() ,query和queryAndSubscribe不需要额外的配置文件,monitor server会将总线上既有的该topic的配置拉取并配置在发起请求的PlasminClient上。通过docker将PLASMON streaming server、cache server、monitor server都启动,并通过docker compose进行编排无疑是SDK环境的最佳实践依赖。
    0_1535091884349_04.jpg

    上例给出的是query的用法,收到消息后.isQueryMark() 返回bool是否结束query,queryAndSubscribe与之类似,通过message.getObject() 得到Object,也可以通过.isQueryMark() 找到query结束点,queryAndSubscribe顾名思义先进行query再继续subscribe,当topic是同一个时,SDK会自动去重,将发起queryAndSubscribe的时候到query结束之间获得的消息完整保留并续到query的消息之后,这样保证了严密的逻辑和顺序,使搭建诸如订单管理模块(OMS)和别的交易模块时能保障消息数据的衔接也能简洁易用。
    0_1535096799008_05.jpg

    query、subscribe、queryAndSubscribe的接口都是异步接口,这里的函数式接口和lambda都是用于异步回调,query的同步用法和queryAndSubscribe的其他用法请参见高级使用。关于query和queryAndSubscribe的支持需要cache server的相应缓存和配置,上例中的"Account=mike"是criteria,有关SDK中的PLASMON cache配置和支持的criteria请参见:PLASMON cache-server


    高级使用

    SQL syntax支持,在query和queryAndSubscribe时会更加简洁明了:
    0_1535098918366_06.jpg

    Sync query支持,Sync query Async subscribe支持:
    0_1535099044943_07.jpg

    .subscribe()和.queryAndSubscribe()支持.unsubscribe() .unQueryAndSubscribe(),需要创建Subscription,而这个过程是同步的,方便随时取消订阅:
    0_1535099123054_08.jpg

    除此之外,SDK还支持请求响应模型(RPC),目前是异步进行,详情参见使用手册 .request() .response() 。

    在生命周期开始和结束时,需要调用 .connect() .close() 来正常开启和关闭PlasmonClient,与此同时,就带来了生命周期的自定义管理,在开启和关闭,甚至是subscribe的调用或者是publish的时候,都可以加入可选参数Option,它的作用因传入的Option实现不同而不同,比如query option传入超时timeout时长,来设置超时规则,详情参见使用手册的method option document。


    使用手册

    development kit完整使用手册请参见:https://git.finogeeks.club/plasmon/MessagingJ/src/master/doc/index.html


    完整demo

    0_1535334740749_01.jpg
    0_1535334830557_02.jpg

    0_1535335003742_03.jpg
    0_1535335415573_04.jpg

    0_1535335478867_05.jpg
    0_1535335617152_06.jpg

    0_1535335894853_07.jpg

    0_1535335940043_08.jpg


    技术概要

    SDK中PlasmonClient API采取:多模式零耦合方法的方式和复用执行器耦合回调逻辑 的模型建立
    δresp = ƒ(p,m|E,H) | (p,m ∈ pattern,method) ∩ (E,H ∈ executor,handler)

    详情可以参阅 tech.info

    版本信息

    0_1535336439886_10.jpg

    如有任何疑问,请留言~