此篇文章作者翻译的。出自blockchain corda团队Mike。
近来出现了一个问题是,corda是否会支持重用现有的消息队列基础设施。这是一个有趣的问题,因为MQ是很多金融机构的核心,正如运用MQ代理消息是现有的操作团队核心能力。
背景
我们常常说Corda如何被金融领域设计的。这不是一个市场营销,而是基于MQ是一个很好的例子。我们一开始设计corda就是基于消息队列的。这与市面上的其他的blockchain系统使用简单的框架网络连接,用在fabric的grpc.
每一个Corda节点都是一个消息代理。 今天,这个消息代理是Apache Artemis,它是流行的ActiveMQ产品的继承者。请注意,尽管它常常让人感到困惑,但它并不是ActiveMQ,它是一个单独的代码基准库曾经被称为HornetMQ。
Corda MQ代理消息处理以下任务:
1.使用amqp/1.0进行P2P网络的可靠通信
2.存储和(完整事务)的消息的重试,这些消息将保证到达离线的节点。
3.设置TLS连接并执行客户机/服务器证书交互身份验证。
4.基于身份的路由。你将消息发送到合法地址,并且Corda网络映射组件确保消息代理总是被配置将消息发送到正确的IP地址,即使消息发送到半路一个节点的IP地址在会话中改变了。
接收和验证CordaRPC连接:
1.CordaRPC是基于MQ的RPC协议,它提供了对响应式编程的完全支持。系统可以传输ReactiveX的观察对象和异步future,推送的消息能够被MQ代理处理。
2.在IP地址更改或网络中断(对终端用户)的情况下,自动重新建立RPC连接。
3.CordaRPC可以很容易地将推送数据流链接到JavaFX响应集合,从而使整个堆栈的全功能/功能UI实现。
4.消息路由在不同的节点组件,可以轻易分离出来。例如,我们正在将事务验证分离到一个单独的进程中。
我们目前还没有使用MQ消息代理提供的所有功能,我们计划在未来进一步发展:
允许消息在任意队列上发送和接收,而不仅仅是P2P节点。通过这种方式,用账本更新工作流可以自然地集成到:
1.已经存在的内部系统,并且在MQ上可用
2.人们(每人一张票,就像一个收件箱)
3.其他的金融网络“说异步信息”。
对P2P和RPC通信的反压力。如果远程对等或连接RPC客户端发送的通信速度太快,或者接收流量过慢,这将导致通过节点和网络传播到原始源的压力,请求它慢下来。尽管我们目前正在丢失一些代码,以将其连接在一起,但Corda在未来的精心设计中,将完全支持未来的压力。反压力使开发人员不必担心意外地向服务器注入数据(或意外被淹没),从而让你以一种简单自然的方式编写代码,你只需尽可能快地使用它,并依赖栈的阻塞特性来让你慢下来。当然,如果你不希望这种反压力完全异步的消息传递也是可能的。
能够对MQ代理进行集群和切分,以获得巨大的消息路由性能。
自动消息分片,允许节点子组件按比例伸缩。
高可用性特性,比如集群之间的自动客户端故障转移。
处理大型文件流,如此庞大的文件可以附加到事务上,通过RPC进行流,然后自动地跨网络传输。例如,我们正在讨论的一个潜在客户希望将这个特性用于交易员监视数据,比如通过将电话的音频记录添加到结果的Corda事务中,从而确保它们成为了一个已签名且不可更改的分类部分。这样做需要能够在网络上以块的大小来传输大于可用RAM的文件。
与LDAP和其他形式的企业SSO基础设施进行集成,以进行客户端身份验证。
非RPC基于数据结构的数据,post各种格式的事件到普通消息队列,因为在某些情况下,你不希望使用我们的RPC库。
咦! 那是很多东西!幸运的是,Artemis支持所有必要的特性,并有很好的文档。它也是由红帽子专业维护的。
当然,Artemis并不是唯一支持这些东西的产品,所以人们自然会喜欢使用他们现有的消息代理。