是否有任何选项可以在不使用开箱即用的“Resequencer”的情况下更改队列顺序?也许可以使用JMS客户端来获取队列中的最后一条消息而不是第一条消息?
答案 0 :(得分:1)
我认为你应该提供更多关于你想要达到的信息...... 无论如何,如果你阅读一些像MQ这样的JMS实现的规范,你会发现FIFO顺序不能保证在100%。 这意味着如果您按照收到的消息的顺序进行转发,您可能很容易遇到麻烦。 最好在邮件头中添加渐进式数字,并使用它来处理邮件。如果您采用此解决方案,您有2个选项来实现您的目标: 1)修改接收器业务逻辑以检查消息的头部; 2)(如果你使用MQ,可能是更干净的方法)使用名为 MESSAGE SELECTOR 的东西。
消息选择器允许使用SQL92查询功能基于内容检索特定消息。 MQ规范声明:
JMS消息提供了提供用户定义的元数据的工具 到JMS消息头(在消息的实际主体之外)。
JMS程序可以利用此功能选择子集
基于选择标准或换言之,JMS的消息
客户只能选择那些感兴趣的消息。
这里有一些关于两种解决方案实施的更多信息...... 您可能感兴趣的属性以及在发送消息之前应该设置的属性是JMSCorrelationID,第一条消息将设置为1,第二条消息将设置为2,依此类推。
1)由于您对消息选择器更感兴趣,因此可以跳到下一个项目符号。无论如何只是为了参考,如果您决定采用解决方案1,您可以在以下方面找到一些很好的参考:
http://activemq.apache.org/maven/apidocs/org/apache/activemq/ActiveMQQueueBrowser.html
2)消息选择器。 您的消息选择器将是一个sql字符串,如:JMSCorrelationID = max(JMSCorrelationID)
如果您想在java中实现消息选择器,则语法为:
MessageConsumer consumer = session.createConsumer(destination,messageSelectorString,true); ActiveMQObjectMessage objMsg =(ActiveMQObjectMessage)consumer.receiveNoWait();