我想使用RabbitMQ不断地将对象的状态广播给任何可能正在收听的消费者。我想设置它,这样当消费者订阅时,它将获得最后一个可用状态……这个是可能的吗?
发布于 2012-05-14 23:37:00
使用自定义的last value缓存交换:例如https://github.com/squaremo/rabbitmq-lvc-plugin
上一个值缓存exchange
这是一个使用RabbitMQ的可插拔交换类型特性的最后一个值缓存的非常简单的实现。
最后一个值缓存旨在解决如下问题:假设我正在使用消息传递向客户端发送一些值更改的通知;现在,当一个新的客户端连接时,它不会知道值,直到它发生更改。
最后一个值交换的作用类似于直接交换(将绑定键与路由键进行等价性比较);但是,它还跟踪与每个路由键一起发布的最后一个值,并且当绑定队列时,它会自动将绑定键的最后一个值入队。
发布于 2012-05-14 23:10:21
使用Recent History Custom Exchange可以做到这一点。它说它将把最后20条消息放在队列中,所以如果它是可配置的,你可以将其更改为最后1条消息,这样就完成了。
如果这不起作用,即数量固定为20,那么您可能不得不处理队列中的前19条消息,并从第20条消息中获取状态。这是一个有点烦人的工作,但您知道参数始终是20,这应该是好的。
最后,如果这不适合你,你可能会设置你的消费者等待,直到第一个状态是接收,假设状态是相当频繁的广播。收到第一个状态后,启动应用程序的其余部分。我在这里假设您在执行其他操作之前需要了解状态。
https://stackoverflow.com/questions/10585598
复制相似问题