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

时间:2018-06-20 15:44:00

标签: interop amqp qpid

我正在考虑将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似乎是最普遍支持的客户端)。在这种情况下,哪一个?

我发现了this含糊不清的问题和一些interoperability documentation about RabbitMQ Clients with QPid Broker-J,但不幸的是,没有一个回答我的问题。 Proton的文档也不够好,我也找不到任何有趣的东西。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:3)

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

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

在队列/交换管理方面,0-x客户端可以继续使用queue.declare或exchange.declare之类的操作。对于AMQP 1.0客户端,这些命令不可用,但是Qpid Broker-J确实提供了两种方法来管理AMQP 1.0客户端的队列。一种选择是使用Qpid Broker-J的REST API创建/绑定交换/队列等。另一种(未记录)选择是使用管理消息到特殊的 $ management 地址。这是OASIS AMQP管理规范草案的实现(此规范可能会发生更改,因此目前没有记录在案)。您可以在一些Qpid Broker-J的测试中找到其用法的示例,例如org.apache.qpid.systests.jms_1_1.extensions.management.AmqpManagementTest和测试方法testCreateQueueOnVirtualHostManagement()给出了有关如何在AMQP管理上创建队列的示例。

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