[英]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.