我目前正在使用Artemis ActiveMQ 2.2.0,通过队列,我能够毫无问题地发送和接收消息。但是,我想找出如果队列中有多个消息,接收方如何只能检索最后一条消息?我应该使用任何特殊队列吗?谢谢
没有直接的方法告诉使用者使用队列中的最后一条消息。队列的基本语义是先进先出(即 FIFO(,因此它们不是为使用最后一条消息而设计的。但是,如果你在生产者和消费者方面有一定的灵活性,你可以得到基本上相同的行为。
我建议您利用最后一个值队列。这是一种特殊类型的队列,其中具有相同"最后一个值"消息属性的消息会自动将队列中的旧消息替换为具有相同属性的消息,以便队列中具有该属性的唯一消息是发送的"最后一个"消息。
生成者需要在消息上设置"last-value"属性,然后使用者将使用具有相同属性的选择器。这样,使用者将始终获得发送的最新消息,而不管有多少其他消息已发送到队列。
您可以在examples/features/standard/last-value-queue
中代理附带的最后一个值示例中看到此操作。如果您愿意,也可以在线浏览。
您可以在Artemis文档中阅读更多相关信息。
使用JMS,您只能浏览队列直到最后一条消息,获取最后一条消息的 JMSMessageID,然后使用 JMSMessageID 的选择器将其从队列中拉出。