如何在 Qpid JMS 中为像 RabbitMQ 这样的 ActiveMQ 创建主题交换?

How to create a topic exchange in Qpid JMS for ActiveMQ like RabbitMQ?

我有一个使用 RabbitMQ 的 Java 应用程序。此应用程序创建一个 TOPIC 交换器,并使用自己的路由键将消息推送到 TOPIC。通过这种方式,如果我想要来自任何应用程序的数据,我会创建一个队列绑定与交换主题和我想要的路由键。

我想通过使用 Qpid JMS 作为客户端和 ActiveMQ 作为服务器的 Java 应用程序来做同样的事情。资料上说可以,但不知道怎么办。我找不到 RabbitMQ 的具体示例。我可以创建队列,但我不知道如何创建交换和绑定。我应该遵循哪些步骤来实现它?

您可能会考虑使用 Artemis 的 ActiveMQ Artemis instead of ActiveMQ 5.x as the address model 比 5.x 的地址模型(更以 JMS 为中心)更类似于 RabbitMQ。

就 JMS 而言,我认为您需要的是:

  1. 一个话题。这类似于 RabbitMQ 中的 "exchange"。发送到 JMS 主题的任何消息都会传递给每个订阅者。这是基本的 publish/subscribe 语义。
  2. 带有选择器的主题订阅者。正如 #1 中所述,主题上的每个订阅者都会收到发送到该主题的任何消息,但是 JMS "selector" 可用于过滤类似于 RabbitMQ 中的路由键的消息。
  3. 消息的商定密钥属性。为了为主题订阅者创建一个可行的选择器,生产者和订阅者必须就 属性 键进行过滤达成一致。

如果每个订阅都会有很多消息,并且这些消息需要在多个 subscribers/consumers 之间共享(例如 load-balancing/distribution),那么您将需要使用 JMS "shared subscription." 但是,共享订阅只是 JMS 2 的一部分,并且只有 ActiveMQ Artemis 实现了 JMS 2。您不能将 ActiveMQ 5.x 与 JMS 共享订阅一起使用,因为它仅支持 JMS 1.1。

ActiveMQ 5.x 和 ActiveMQ Artemis 默认情况下都按需创建服务器端资源(例如主题、队列等),因此您需要做的就是编写 JMS 应用程序。