[英]RabbitMQ - Ruby - Bunny - Best practise to (re-)publish messages to next queue
[英]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.