使用REST时ActiveMQ持久性问题

时间:2014-11-23 11:53:34

标签: rest activemq

我使用默认的ActiveMQ(版本5.10.0)配置,该配置应该将消息持久保存到磁盘。

当我在主题上发布一些消息时,关闭activemq,再次重新启动它然后启动消费者,消费者不会收到消息。

这里有详细说明。

  1. 我使用REST界面订阅了关于主题X的消费者。
  2. 我使用REST
  3. 发布关于主题X的消息
  4. 我关闭ActiveMQ然后重新启动它。
  5. 我启动消费者接收关于主题X的消息。没有收到任何消息。
  6. 那么,我发来的消息怎么了?

    我用于发布的命令:

    curl -u admin:admin -d "body=test" "http://localhost:8161/api/message/erdata" -d type=topic

    订阅命令:

    wget --user admin --password admin --save-cookies cookies.txt --load-cookies cookies.txt --keep-session-cookies "http://localhost:8161/api/message/erdata?type=topic&clientId=consumer"

    更新

    根据Erik的回答,我尝试过使用虚拟主题。 我已经在activemq.xml中添加了以下代码:

    <destinationInterceptors>
          <virtualDestinationInterceptor>
            <virtualDestinations>
              <virtualTopic name=">" prefix="VirtualTopicConsumers.*." selectorAware="false"/>
            </virtualDestinations>
          </virtualDestinationInterceptor>
        </destinationInterceptors>
    

    我也改变了我的发布和消费命令。

    新发布命令:

    curl -u admin:admin -d "body=val1" "http://localhost:8161/api/message/VirtualTopic/erdata" -d type=topic
    

    消费的新命令:

    wget --user admin --password admin --save-cookies cookies.txt --load-cookies cookies.txt --keep-session-cookies "http://localhost:8161/api/message/Consumer/A/VirtualTopic/erdata?type=queue&clientId=A"
    

    现在的问题是我甚至没有收到消费者的任何消息。 hawtio告诉我,我有一个话题VirtualTopic.erdata,其中有0个消费者,4个消息入队,有0个出列消息和0个调度消息。有一个队列Consumer.A.VirtualTopic.erdata有1个消费者,但有0个已排队,已分派和已出列的消息。我在这里做错了什么?

    格里

1 个答案:

答案 0 :(得分:0)

主题不支持没有持久订阅的持久性,也不支持排队解决方案的主题之一,例如虚拟主题。但是,REST API不支持持久订阅, 所以你有两个选择。

如果您要求多个订阅者获取邮件的副本,并确保邮件在中断后仍然存在,则可以使用Virtual Topics and/or Composite queues

但是,如果您只关心下一个消费者获取消息,那么您只需指定&#34; queue&#34;就可以直接进入队列。作为上例中的类型:

curl -u admin:admin -d "body=test" "http://localhost:8161/api/message/erdata" -d type=queue