AMQP 1.0 原型设计
我们一直在对一个新的协议进行原型设计,这符合我们的习惯。这个协议称为“AMQP 1.0 R0”,它是AMQP工作组(RabbitMQ以及后来VMware都是成员)的新发布。 “R0”表示它是建议的第一个修订版。规范尚不完整:有很多待办事项,并且在很大程度上尚未得到验证。这两个事实是我们促使进行原型设计的部分原因。
原型代码镜像在github上:https://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”,在那里它将针对核心协议的其他实现(并非所有这些都是开源的)进行测试。同样,这将有助于消除规范中互操作性的障碍。