FISCO BCOS的AMOP使用介绍

发布时间:2020-11-09 来源:本站


作者:尹强文FISCO BCOS 社区贡献者



AMOP简介


链上信使协议AMOP(Advanced Messages Onchain Protocol)旨在为联盟链各个机构提供一个安全高效的消息传输信道,支持跨机构之间,点对点地实时消息通信,为链外系统之间的交互提供标准化接口,AMOP基于SSL通信加密,确保消息无法被窃听,消息收发均有异常重传、超时检测和路径规划机制,确保消息传输的可靠性。


逻辑架构


AMOP使用了FISCO BCOS的P2P底层通信,逻辑架构如下:



各区域概述如下:



核心实现


AMOP的消息收发基于Sub-Pub订阅机制,服务端首先设置一个Topic,客户端往该Topic发送消息,服务端即可收到。


AMOP支持同一个区块链网络中有多个Topic收发消息,支持任意数量的服务端和客户端,当有多个服务端关注同一个Topic时,该Topic的消息将随机下发到其中一个可用的服务端。


AMOP包括两个流程:

1. 服务端设置Topic,用以监听该Topic的消息;

2. 客户端往该Topic发送消息。


下面以一个例子来说明内部实现,如下图所示,有2个SDK分别为SDK1、SDK2,2个节点分别是Node1、Node2。SDK1连接Node1设置Topic T1,SDK2连接Node2发送Topic为T1的消息。


1. 服务端设置Topic,用以监听该Topic的消息的时序



主要流程如下:

  1. SDK1发送监听某个Topic消息的请求,到其直连的节点Node1,Node1里维护了节点与Topic列表的映射关系,该映射关系用于消息路由,是一个map结构,key是NodeId,value是一个set,set存储的是该NodeId可以接收消息的Topic列表。

  2. Node1新增一个Topic之后,节点会更新节点与Topic映射表。

  3. Node1更新seq:seq主要用于保证各节点映射表一致,新增一个Topic之后,本节点的seq会加1,节点之间的心跳包会将这个值带上发送到其他节点,其他节点(Node2)接收到心跳包之后对比参数里的seq与本节点的seq,如果不一致会向源节点(Node1)请求节点与Topic列表的映射关系,将最新的映射关系更新到本节点并更新seq。这样就保证了全局映射关系的一致。


2. 客户端往该Topic发送消息时序




配置文件配置


AMOP无需任何额外配置,以下为Web3Sdk的参考配置。详细请参考:(https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/sdk/sdk.html)



不同SDK的配置文件差异在于连接的节点地址不同,以文章开头处的逻辑架构图为例,假定Node1的监听地址是127.0.0.1:20200,Node2的监听地址是127.0.0.1:20201,那么SDK1配置为127.0.0.1:20200,SDK2配置127.0.0.1:20201。


测试


按上述说明配置好后,用户指定一个Topic,执行以下两个命令可以进行测试。


启动amop服务端



java -cp 'conf/:apps/*:lib/*' org.fisco.bcos.channel.test.amop.Channel2Server [topic]



启动amop客户端



java -cp 'conf/:apps/*:lib/*' org.fisco.bcos.channel.test.amop.Channel2Client [topic] [消息条数]



客户端和服务器执行后得如下效果:



常见错误码及问题定位



未来计划


未来将继续丰富AMOP功能,支持二进制传输、消息多播协议以及Topic认证机制等,也欢迎大家使用AMOP,并提出优化建议。


分享至: