4

我想使用 RabbitMQ 将对象的状态连续广播给可能正在收听的任何消费者。我想设置它,这样当消费者订阅时,它将获取最后一个可用状态......这可能吗?

4

2 回答 2

6

使用自定义的最后一个值缓存交换:例如 https://github.com/squaremo/rabbitmq-lvc-plugin

最后值缓存交换

这是使用 RabbitMQ 的可插入交换类型功能的最后一个值缓存的非常简单的实现。

最后一个值缓存旨在解决以下问题:假设我正在使用消息传递向客户端发送一些更改值的通知;现在,当一个新客户端连接时,它不会知道该值,直到它发生变化。

最后一个值交换就像一个直接交换(绑定键与路由键比较是否相等);但是,它还会跟踪与每个路由键一起发布的最后一个值,并且当绑定队列时,它会自动将绑定键的最后一个值排入队列。

于 2012-05-14T15:36:59.733 回答
1

最近历史自定义交换是可能的。它说它将把最后 20 条消息放入队列中,所以如果它是可配置的,您可以将其更改为最后 1 条消息,然后就完成了。

如果这不起作用,即数量固定为 20,那么您可能必须处理队列中的前 19 条消息并从第 20 条获取状态。这有点烦人,但正如您所知,参数始终为 20,这应该没问题。

最后,如果这不适合您,您可能会将您的消费者设置为等到收到第一个状态,假设该状态被合理频繁地广播。一旦收到第一个状态,然后启动应用程序的其余部分。我在这里假设您在做其他事情之前需要状态。

于 2012-05-14T15:10:21.353 回答