我正在将 tty 的 stdout 和 stderr 流式传输到 RabbitMQ(准确地说是日志)。这些日志可以在网站上查看,当内容流式传输到 RabbitMQ 时,它们由 Web 服务器使用并使用 WebSockets 转发到客户端。日志在发送到 RabbitMQ 后立即被持久化。
当用户访问网站时,会呈现持久化的日志,并使用 WebSockets 流式传输连续的部分。问题是存在竞争条件,因为持久化日志可能缺少在呈现站点和通过 WebSocket 接收第一个块之间发生的日志块。
我的想法是将所有块保留在队列中,并在连接后通过 WebSocket 发送它们。此外,我会添加一个工作人员来收听某种“已完成”事件,然后将队列中的所有内容都取出并立即持久化。
问题是我不知道这是否可以使用 RabbitMQ 或如何实现。有什么想法或其他解决方案吗?
我认为这并不重要,但我的堆栈正在使用 Ruby Sinatra 和 Bunny RabbitMQ 客户端。