0

我目前正在使用 Artemis ActiveMQ 2.2.0 和队列,我能够毫无问题地发送和接收消息。但是,我想知道如果队列中有多条消息,接收方如何只能检索最后一条消息?我应该使用任何特殊的队列吗?谢谢,

4

2 回答 2

1

没有直接的方法告诉消费者消费队列中的最后一条消息。队列的基本语义是先进先出(即 FIFO),因此它们不是为使用最后一条消息而设计的。但是,如果您的生产者和消费者具有一定的灵活性,您可以获得基本相同的行为。

我建议您利用最后一个值队列。这是一种特殊类型的队列,其中具有相同“last-value”消息属性的消息会自动替换队列中具有相同属性的旧消息,以便队列中唯一具有该属性的消息是发送的“最后一个”消息。

您的生产者需要在消息上设置“last-value”属性,然后消费者将使用具有相同属性的选择器。这样,无论有多少其他消息已发送到队列,消费者将始终获得最新发送的消息。

您可以在代理随附的最后一个值示例中看到这一点examples/features/standard/last-value-queue。如果您愿意,也可以在线浏览。

您可以在Artemis 文档中阅读有关它的更多信息。

于 2017-09-01T18:39:10.930 回答
0

使用 JMS,您只能浏览队列直到最后一条消息,获取最后一条消息的 JMSMessageID,然后使用 JMSMessageID 选择器将其从队列中拉出。

于 2017-08-02T17:39:09.557 回答