【问题标题】:Apache Artemis V 2.1.0阿帕奇阿耳忒弥斯 V 2.1.0
【发布时间】:2017-06-07 14:25:31
【问题描述】:

我使用的是 Artemis 1.5.3,我的寻址方案是 jms.topic.xxx 用于 pub-sub 和 jms.queue.xxx 用于点对点,一切都很好。但是,我切换到 2.1.0 版本并且 jms.topic.xxx 像点对点路由一样工作,这意味着并非所有订阅者都会收到消息。以前,我使用的是 ActiveMQ,它们的命名前缀是 /topic.xxx 和 /queue.xxx。我还尝试根据 activemq.apache.org/artemis/docs/2.1.0/address-model.html 在 broker.xml 中设置多播配置,但 Artemis 抱怨并且不会启动。任何帮助将不胜感激。

【问题讨论】:

    标签: stomp spring-websocket activemq-artemis


    【解决方案1】:

    没有看到日志中的实际错误是什么,我将假设您的实例没有启动,因为您定义队列和/或主题的方式。在 2.x 和更新的版本中,Artemis 改变了您定义队列或主题的方式(他们切换到地址模型http://activemq.apache.org/artemis/docs/2.1.0/address-model.html)。下面是一个例子。我希望这有帮助。

    ….. broker.xml 配置的其余部分

      <addresses>
         <!-- default queues for artemis -->
         <address name="DLQ">
            <anycast>
               <queue name="DLQ" />
            </anycast>
         </address>
         <address name="ExpiryQueue">
            <anycast>
               <queue name="ExpiryQueue" />
            </anycast>
         </address>
    
         <!-- Define topics -->
         <address name="SomeTestTopic">
            <multicast/>
         </address>
    
         <!-- Define queues -->
         <address name="RequestReplyQueue">
            <anycast>
               <queue name="RequestReplyQueue" />
            </anycast>
         </address>
    
      </addresses>
    

    【讨论】:

    • 感谢 Celias 的快速响应,对于多播定义,我可以做类似 jms.topic.# 的通配符以保持与现有客户端的向后兼容,因此 jms.topic.stock.quote 将导致在多播中?谢谢
    • 是的,我知道在我的示例中,我有 name="SomeTestTopic",但对于分层命名,您将使用 name="stock.quote" 和通配符 jms.topic.# 或 jms .topic.stock.# 会起作用
    • 太棒了!谢谢。我会试一试并更新这个帖子。
    • 我在下面添加了地址设置并让三个客户端订阅了 jms.topic.stocks.ibm 但是,他们以任播方式接收消息,它在 3 个客户端之间实现负载平衡,我期待所有 3 个客户端都会收到作为广播的消息:
    • 这里是我添加的通配符的 sn-p ...
      ...
      但是 - 如果我将上面的地址名称设置为 jms.topic.stock.ibm 那么所有三个客户端都会收到消息广播(pub/sub)
    猜你喜欢
    • 2022-11-28
    • 2019-05-05
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多