AMQP 1.0 和 0-* 客户端之间的互操作性

Interoperability between AMQP 1.0 and 0-* clients

我正在考虑在我们正在开发的架构中引入 QPid Broker-J 作为 AMQP 代理,因为它广泛支持不同版本的 AMQP 协议。

我们将只是生产者,而我们无法控制的第三方软件将充当消费者。 我们的生产者会用 C++ 编写,所以一开始最明智的做法似乎是采用 Proton C++ 作为客户端库,它使用最新的 AMQP 1.0。

然后我读到 1.0 规范是所有以前规范的 lot different,这引起了对互操作性的担忧。例如,它没有提及任何关于交换的内容。

所以,我的问题是...这两个版本可以互通吗?我是否仍然可以从 AMQP 1.0 客户端访问我需要的所有概念,例如来自 AMQP 0-* 客户端的交换和队列管理? 或者我应该放弃使用 Proton C++ 的想法并为旧版本采用另一个客户端(0-9-1 似乎是最普遍支持的)。在这种情况下,是哪一个?

我找到了 vaguely related question and some interoperability documentation about RabbitMQ Clients with QPid Broker-J,但遗憾的是他们都没有回答我的问题。 Proton的文档也不是很好,我也找不到任何有趣的东西。

提前感谢您的宝贵时间。

一般来说,Qpid Broker-J 尽可能提供不同 AMQP 版本的客户端之间的完全互操作性。

就交换等概念而言,如您所见,AMQP 1.0 本身并未定义这些概念,但是 Qpid Broker-J 允许您的 AMQP 1.0 客户端将消息发送到交换(以及 "consume"直接从交换通过 - 在后台 - 创建一个临时队列并将其绑定到交换)。

在queue/exchange管理方面,0-x客户端可以继续使用queue.declare或exchange.declare等操作。对于 AMQP 1.0 客户端,这些命令不可用,但是 Qpid Broker-J 确实提供了几种方法来管理 AMQP 1.0 客户端的队列。一种选择是使用 Qpid Broker-J 的 REST API 到 create/bind exchanges/queues 等。另一个(未记录的)选项是使用管理消息到特殊的 $management地址。这是 Draft OASIS AMQP Management 规范的实现(可能会发生变化,因此目前没有记录)。您可以在 Qpid Broker-J 的一些测试中找到它的使用示例,例如org.apache.qpid.systests.jms_1_1.extensions.management.AmqpManagementTest 使用测试方法 testCreateQueueOnVirtualHostManagement() 举例说明如何通过 AMQP 管理创建队列。

如果您对 Qpid Broker-J 有任何疑问,我建议您将 Qpid 的用户列表 (users@qpid.apache.org) 邮寄给开发人员,他们很乐意回答任何问题。