PubSub:是否有可能为迟到的订阅者获取最后一条消息?

PubSub: is it possible to get last message for a late subscriber?

我将使用发布订阅机制 (AWS SNS / activeMQ)。

我想知道是否有可能在一个有过期时间(在我的例子中是 5 分钟)的主题上放置一条消息,这样订阅该主题的消费者即使在消息到期后订阅也能收到它推了。

例如,我每 5 分钟向主题 "sensor#3" 推送一条消息 "the sensor measured 5 units"。我希望主题的新订阅者能够收到最后一条消息,而不必等待 5 分钟才能收到消息。

当没有消费者时,主题不会保留消息。您需要创建持久主题订阅,以便存储消费者离线时发送的消息。

ActiveMQ 确实有一个名为 retroactive consumers 的功能,如果它们仍然碰巧在内存缓存中,它将尝试将旧消息传递给主题订阅,但不能保证这会发生,所以不要指望它是 100% 可靠的。

如果您使用的是 SNS,则可以为其订阅 SQS 队列。然后,您可以轮询队列并接收那里的任何消息,而不是直接订阅主题。不过,您应该考虑一些设计问题,例如 SQS 消息可能会乱序发送或多次发送。