首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveMQ LIFO订单?

ActiveMQ LIFO订单?
EN

Stack Overflow用户
提问于 2013-04-30 12:50:02
回答 1查看 1.8K关注 0票数 0

是否有任何选项可以更改队列顺序而不使用开箱即用的"Resequencer"?也许可以使用JMS客户端来获取队列中的最后消息而不是第一条消息?

EN

回答 1

Stack Overflow用户

发布于 2013-04-30 14:24:18

我认为你应该提供更多关于你想要达到的目标的信息.无论如何,如果您阅读一些JMS实现(如MQ )的规范,您将看到FIFO顺序没有100%的保证。这意味着,如果您按照收到的消息的顺序中继,您可能很容易陷入麻烦。这是一个很好的做法,添加一个累进数字的消息头,并使用它来处理您喜欢的消息。如果采用此解决方案,则有两个选项可以实现您的目标: 1)修改接收方业务逻辑以检查消息头;2) (如果使用MQ,可能是更干净的方法)使用名为消息选择器的方法。

消息选择器允许使用SQL92 92-查询函数对特定消息进行内容检索。MQ规范声明:

  • JMS消息提供了向JMS消息头(消息的实际正文之外)提供用户定义的元数据的工具。
  • JMS程序可以利用这个工具来选择一个子集。 基于选择标准的消息,或者换句话说,JMS 客户端只能选择它感兴趣的消息。

这里有更多关于这两种解决方案实现的信息..。您可能感兴趣并且在发送消息之前应该设置的属性是JMSCorrelationID,它将被设置为第一条消息的1,第二条消息的2,依此类推。

1)由于您对消息选择器更感兴趣,所以可以跳到下一个项目。无论如何,如果您决定采用解决方案1,您可以在以下几个方面找到一些很好的参考:

http://activemq.apache.org/maven/apidocs/org/apache/activemq/ActiveMQQueueBrowser.html

( 2)信息选择器。您的消息选择器将是类似于: JMSCorrelationID = max(JMSCorrelationID)的sql字符串。

如果您想在java中实现消息选择器,语法是:

MessageConsumer session.createConsumer=session.createConsumer(目的,messageSelectorString,真);ActiveMQObjectMessage objMsg = (ActiveMQObjectMessage) consumer.receiveNoWait();

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16300353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档