使用链上信使¶
标签:AMOP
链上信使
私有话题
认证流程
链上信使协议介绍¶
链上信使协议AMOP(Advanced Messages Onchain Protocol)系统旨在为联盟链提供一个安全高效的消息信道,联盟链中的各个机构,只要部署了区块链节点,无论是共识节点还是观察节点,均可使用AMOP进行通讯,AMOP有如下优势:
实时:AMOP消息不依赖区块链交易和共识,消息在节点间实时传输,延时在毫秒级。
可靠:AMOP消息传输时,自动寻找区块链网络中所有可行的链路进行通讯,只要收发双方至少有一个链路可用,消息就保证可达。
高效:AMOP消息结构简洁、处理逻辑高效,仅需少量cpu占用,能充分利用网络带宽。
安全:AMOP的所有通讯链路使用SSL加密,加密算法可配置,支持身份认证机制。
易用:使用AMOP时,无需在SDK做任何额外配置。
AMOP功能使用请参照Java SDK AMOP.
逻辑架构¶
以银行典型IDC架构为例,各区域概述:
链外区域:机构内部的业务服务区,此区域内的业务子系统使用区块链SDK,连接到区块链节点。
区块链P2P网络:此区域部署各机构的区块链节点,此区域为逻辑区域,区块链节点也可部署在机构内部。
普通话题¶
AMOP的消息收发基于话题(Topic)订阅机制,订阅者首先订阅一个话题,发送者往该话题发送消息,订阅者即可收到。
发送方式和内容
总共支持两种传播方式:
单播:仅随机发送给一个指定话题的订阅者。
多播:发送给所有指定话题的订阅者。
发送内容:
文本消息
文件
私有话题¶
在普通的配置下,任何一个订阅了某topic的接收者都能接受到发送者推送的消息。但在某些场景下,发送者只希望特定的接收者能接收到消息,不希望无关的接收者能任意的监听此topic。在此场景下,需要使用私有话题功能。
私有话题:对于特定的话题,发送者配置好期望的接受者的公钥,仅该公钥所对应的订阅者才能接收该私有话题的消息。
私有话题功能是自FISCO BCOS 2.1.0 之后新增的。使用过程如下:
1:接收者使用生成公私钥脚本生成公私钥文件,私钥保留,公钥给生产者。
2:参考配置案例将配置文件配好。启动接收端和发送端进行收发消息。
重要
注意:AMOP私有话题目前只支持非国密算法,因此生成在生成公私钥文件时,注意使用非国密工具生成。
私有话题的认证流程
假定链外系统1是话题消息发送者(消息发送端),链外系统2是话题订阅者(消息接收端)。私有话题的认证流程如下:
1:链外系统2连接Node2,宣称订阅T1,Node2将T1加入到话题列表,并将seq加1。同时每5秒同步seq到其他节点。
2:Node1收到seq之后,对比本地seq和同步过来的seq,发现不一致,则从Node2获取最新的话题列表,并将话题列表更新到p2p的话题列表,对于还没认证的私有话题,状态置为待认证。Node1遍历列表。针对每一个待认证的私有话题,进行如下操作:
2.1:Node1往Node1推送消息(消息类型0x37),请求链外系统1发起私有话题认证流程。
2.2:链外系统1接收到消息之后,生成随机数,并使用amop消息(消息类型0x30)将消息发送出去,并监听回包。
2.3:消息经过 链外系统1–>Node1–>Node2–>链外系统2的路由,链外系统2接收到消息后解析出随机数并使用私钥签名随机数。
2.4:签名包(消息类型0x31)经过 链外系统2–>Node2–>Node1->链外系统1的路由,链外系统1接收到签名包之后,解析出签名并使用公钥验证签名。
2.5:链外系统1验证签名后,发送消息(消息类型0x38),请求节点更新topic状态(认证成功或者认证失败)。
3:如果认证成功,链外系统的一条消息到达Node1之后,Node1会将这条消息转发给Node2,Node2会将消息推送给链外系统2。
发送方式和内容
同样的私有话题支持单播和多播,发送文本和文件。
错误码¶
99:发送消息失败,AMOP经由所有链路的尝试后,消息未能发到服务端,建议使用发送时生成的
seq
,检查链路上各个节点的处理情况。100:区块链节点之间经由所有链路的尝试后,消息未能发送到可以接收该消息的节点,和错误码‘99’一样,建议使用发送时生成的‘seq’,检查链路上各个节点的处理情况。
101:区块链节点往Sdk推送消息,经由所有链路的尝试后,未能到达Sdk端,和错误码‘99’一样,建议使用发送时生成的‘seq’,检查链路上各个节点以及Sdk的处理情况。
102:消息超时,建议检查服务端是否正确处理了消息,带宽是否足够。
103:因节点出带宽限制,SDK发到节点的AMOP请求被拒绝。