【问题标题】:How to create a topic exchange in Qpid JMS for ActiveMQ like RabbitMQ?如何在 Qpid JMS 中为 RabbitMQ 等 ActiveMQ 创建主题交换?
【发布时间】:2020-06-04 05:59:00
【问题描述】:

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

我想通过使用 Qpid JMS 作为客户端和 ActiveMQ 作为服务器的 Java 应用程序来做同样的事情。信息说这是可能的,但我不知道如何。在 RabbitMQ 看来,我找不到一个具体的例子。我可以创建队列,但我不知道如何创建交换和绑定。我应该遵循哪些步骤来实现它?

【问题讨论】:

    标签: rabbitmq jms activemq qpid jmstemplate


    【解决方案1】:

    您可以考虑使用ActiveMQ Artemis 而不是 ActiveMQ 5.x,因为 Artemis 的 address model 与 RabbitMQ 的相似性远高于 5.x 的地址模型(更以 JMS 为中心)。

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

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

    如果每个订阅都将包含大量消息,并且这些消息需要在多个订阅者/消费者之间共享(例如,用于负载平衡/分配),那么您将需要使用 JMS“共享订阅”。但是,共享订阅只是 JMS 2 的一部分,只有 ActiveMQ Artemis 实现了 JMS 2。您不能将 ActiveMQ 5.x 与 JMS 共享订阅一起使用,因为它只支持 JMS 1.1。

    ActiveMQ 5.x 和 ActiveMQ Artemis 都默认按需创建服务器端资源(例如主题、队列等),因此您只需编写 JMS 应用程序即可。

    【讨论】:

    • 谢谢,它工作正常,只是一个细节,每个订阅者都是一个拥有所有数据的客户端,但是如果有很多数据,有没有办法为订阅分配数据(类似于有多个消费者的队列)?
    • 试过了,问题是我用的是Amazon MQ的ActiveMQ,只能选择ActiveMQ 5.x
    • 这很不幸。由于您使用的是 Amazon MQ(基于 ActiveMQ 5.x),因此您将无法使用 JMS 2 中的任何功能。
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2012-02-12
    • 2018-03-30
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多