繁体   English   中英

RabbitMQ将消息排入队列

[英]RabbitMQ keep messages in queue

我正在将tty的stdout和stderr流式传输到RabbitMQ(确切地说是日志)。 这些日志可以在网站上查看,并且在将内容流式传输到RabbitMQ时,它们将由Web服务器使用,并使用WebSockets转发给客户端。 将日志发送到RabbitMQ后立即保留。

当用户访问网站时,将呈现持久日志,并使用WebSockets传输连续部分。 问题在于存在争用条件,因为持久日志可能会丢失在呈现站点与通过WebSocket接收第一个块之间发生的日志块。

我的想法是将所有块保留在队列中,并在连接后通过WebSocket发送这些块。 另外,我将添加一个工作程序来侦听某种“完成”事件,然后该事件将队列中的所有内容都保留并立即保留。

问题是我不知道是否可以使用RabbitMQ或如何做到这一点。 有什么想法或其他解决方案吗?

我认为这并不重要,但是我的堆栈使用的是Ruby Sinatra和Bunny RabbitMQ客户端。

虽然我同意您关于从上次中断的地方开始的一般想法,但是在加载初始页面后,您要尝试做的事情不是RabbitMQ应该做的。

这会导致很多潜在的问题,我之前在博客中已经概述了这些问题。

与其尝试通过RMQ进行操作,不如从数据库层进行操作。

当您将内容推送到数据库中时,您将获得一个ID-希望该ID是顺序的。 如果不是,则将序列添加到条目中。

当您为用户加载页面时,将他们当前所在的ID发送到浏览器。

页面加载完成并设置了websocket连接后,请通过websocket在消息列表中发送用户的当前位置。 那么websocket连接可以使用该ID来说“在此ID之后给我所有消息,然后开始流式传输”

同样,这不是通过RabbitMQ来完成的(请参阅我的文章,为什么这是一个坏主意 ),而是通过数据库和顺序ID来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM