activemq优先级

我们目前正在使用JMS和activemq(5.5.1)开发应用程序。 我们希望为某些消息定义更高的优先级,这将使它们首先被消耗。 在设置生产者和使用者之后(通过spring(3.1)JMSTemplate),优先级不能完全发挥作用。 实际上,当我们“关闭”消费者并发送一些消息时,优先权得到尊重,但是当我们在消费者开启时添加消息时,消息的接收顺序与他们发送的顺序相同。

配置很简单:

在activemq配置文件中激活优先级:

 " prioritizedMessages="true"/> ...  

并且在生产者模板配置中启用了QoS:

      

要发送具有高优先级的消息,我们只需更改生产者端的模板优先级属性:

 template.setPriority(9); 

任何想法? 这是正常的行为,还是有一些我们会忘记的配置?

如果我的意见你没有遗漏任何东西,几周前我有类似的问题(但有TTL和QPid)。

首先,JMS对此并不严格:

 JMS does not require that a provider strictly implement priority ordering of messages; however, it should do its best to deliver expedited messages ahead of normal messages. 

其次,ActiveMQ没有实现优先级队列,他们说它会在6.x版本的某个地方。

所以,你看到的实际上是正常的。

作为一种解决方法,如果适合您的情况,您可以使用Resequencer模式。

http://camel.apache.org/resequencer.html

这是关于这个主题的另一个讨论:

http://activemq.2283324.n4.nabble.com/Priority-message-td2352179.html

我知道现在已经晚了,但这个答案可能对某些人有所帮助。

如果您希望您的消费者根据优先级(优先级队列)使用消息,那么您可以使用客户端消息优先级。 这意味着,当消息被发送给您的消费者时(甚至在消费者接收消息之前,使用预取),它们将被缓存在消费者端并默认优先级。 无论您是否在代理方使用优先支持,这都是一样的。 这可能会影响您在消费者身上看到的顺序,所以请记住这一点。

要启用它,请在代理URL上设置以下配置选项,例如,

 tcp://0.0.0.0:61616?jms.messagePrioritySupported=true 

要禁用它, tcp://0.0.0.0:61616?jms.messagePrioritySupported=false

所以你不需要使用Camel(如果你想避免复杂化)