我们一如既往地在对一项新协议的支持进行原型设计。这项新协议名为“AMQP 1.0 R0”,它是 AMQP 工作组(RabbitMQ,以及后来的 VMware,都是其成员)提出的新版本。“R0”表示它是修订版建议的第一个版本。该规范尚不完整:有许多待办事项(TODO),并且在很大程度上尚未经过验证。这两个事实也是促使我们进行原型设计的因素之一。
原型代码已在 github 上镜像:http://github.com/rabbitmq/rabbitmq-amqp1.0。它的构建方式与我们所有的插件完全相同。
AMQP 1.0 R0 规范与之前版本的 AMQP 规范不同之处在于,它不定义 broker 模型;也就是说,它不定义 exchange、queue 和 binding,或者它们的等价物。该协议实际上只关乎将消息从一个代理传输到另一个代理,然后就结果达成一致。这意味着它可以附加到消息 broker 实现上,以及其他用途——其理念是人们可以调整现有模型以适应需求。
在我们的案例中,现有的模型是 AMQP 0-9-1 的模型,并包含一些泛化和扩展(例如,链式 binding)。因此,我们原型设计的目标是能够同时使用 1.0 客户端和 0-9-1 客户端连接并完成一些有用的工作。
好消息是,我们已经实现了这一点。实际上,该插件可以配置为替代 Rabbit 原有的网络监听器,并能够愉快地与 AMQP 0-8、0-9-1 和 1.0 客户端进行通信。在此过程中,我们确实进行了一些创新,并且有一些规范的部分是我们没有实现的。这些内容稍后将在 README 文件中详细说明。
其中一项重要的创新是填补规范中未定义的部分。其中一些细节已在我们为 AMQP 工作组所做的客户端-broker 协议工作中有所说明。我们希望原型设计能帮助进一步完善这部分内容。
下周,我将把我们的原型带到AMQP 1.0 “Connectathon”,届时它将与其他核心协议的实现(并非所有实现都是开源的)进行测试。同样,这将有助于消除规范中互操作性方面的障碍。