AMQP 1.0 原型开发
我们一直在进行一个新协议的原型开发支持,这符合我们一贯的做法。这个协议被称为 “AMQP 1.0 R0”,它是 AMQP 工作组(RabbitMQ 和后来的 VMware 都是其成员)的最新版本。“R0” 表示这是建议的第一个修订版。该规范尚不完整:有很多待办事项(TODO),并且在很大程度上未经证实。这两个事实是促使我们进行原型开发的部分原因。
原型代码镜像在 GitHub 上:http://github.com/rabbitmq/rabbitmq-amqp1.0。它的构建方式与我们所有的插件完全相同。
AMQP 1.0 R0 规范与以前版本的 AMQP 规范不同,因为它没有定义代理模型;也就是说,它没有定义交换机、队列和绑定,或它们的等价物。该协议实际上只关注将消息从一个代理传输到另一个代理,然后就结果达成一致。这意味着它可以附加到消息代理实现中,以及其他用途——其理念是人们可以调整现有模型以适应需求。
在我们的案例中,现有的模型是 AMQP 0-9-1,带有一些泛化和扩展(例如,链式绑定)。因此,我们原型开发的目标是能够同时连接 1.0 客户端和 0-9-1 客户端,并完成一些有用的工作。
好消息是,我们已经实现了这一点。实际上,该插件可以设置为替换 Rabbit 常规的网络监听器,并且可以愉快地与 AMQP 0-8、0-9-1 和 1.0 客户端通信。我们确实在过程中进行了一些创新,并且规范的某些部分我们显然没有实现。这些将在 README 中详细说明。
创新的一大部分是填补规范中沉默的语义空白。其中一些在我们为 AMQP 工作组所做的这份客户端-代理协议工作中得到了详细说明。我们希望原型开发将有助于进一步完善这一点。
下周,我将把我们的原型带到 AMQP 1.0 “Connectathon”,在那里它将针对核心协议的其他实现进行测试(并非所有实现都是开源的)。同样,这将有助于找出规范中互操作性的障碍。