考虑一个群聊场景,其中 4 个客户端连接到一个交换主题。这些客户端各自向主题发送接收消息,因此,它们都发送/接收来自该主题的消息。
现在想象一下,第 5 个客户端进来并想要读取从时间开始发送的所有内容(例如,因为该主题是第一次创建并连接到的)。
是否有内置功能RabbitMQ
来支持这一点?
非常感谢,
编辑:
为了澄清起见,我真正要问的是是否RabbitMQ
支持,SOW
因为我无法在任何地方的文档中找到它(http://devnull.crankuptheamps.com/documentation/html/develop/configuration/html/chapters/sow。 html)。
具体来说,问题是:RabbitMQ 有没有办法在新订阅者加入时输出已发送到主题的所有消息?
简短的回答是否定的。
长答案是也许。如果预先知道所有潜在的“参与者”,则可以提前设置和配置参与者队列,订阅主题,并在服务器运行时收集发布到主题的所有消息(匹配路由键)。额外的服务器配置可以产生在服务器重新启动后持续存在的队列。
请注意,所描述的原始问题/功能请求与 RabbitMQ 的架构不一致。RabbitMQ 应该是一个瞬态存储节点,客户端随机连接和断开连接。转储到队列中的消息旨在仅由一个消息使用者处理,一旦处理完毕,消息代理的工作就是忘记该消息。
实现这种功能的另一种方法是拥有一个审计队列,其中所有发布的消息都分发到队列中,并且写入服务将它们全部写入某个地方的审计日志(通常在持久数据存储或文本文件中)。这将是您必须构建的东西,因为目前没有插件可以自动将消息发送到持久存储(例如Couchbase、Elasticsearch)。
或者,如果用作调试工具,还有Firehose插件。当您能够手动启用/禁用它时,这是令人满意的,但不是一个好的长期解决方案,因为它会在代理中断时自行关闭。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句