簡體   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