第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何僅使用消息 ID(在 Go 中)確認(rèn) Rabbitmq 消息?

如何僅使用消息 ID(在 Go 中)確認(rèn) Rabbitmq 消息?

Go
達(dá)令說 2021-11-08 15:45:30
我構(gòu)建了一個小型服務(wù)器 (golang) 來從 RabbitMQ 獲取消息并通過 Websocket 將它們傳送到連接的瀏覽器。它工作得很好,但有一個警告:當(dāng)通過 websocket 傳遞到瀏覽器時,消息會得到確認(rèn)。對于大多數(shù)消息來說沒問題,但有些消息可能非常重要。如果用戶的瀏覽器收到了那些但用戶沒有看到消息,那么如果瀏覽器關(guān)閉或重新加載,它就會丟失。有沒有辦法稍后根據(jù)消息 ID(來自 Delivery 結(jié)構(gòu))確認(rèn)消息?用例是當(dāng)用戶明確確認(rèn)某些消息時會確認(rèn)它們,然后將消息 ID 發(fā)送回工具以通過 RabbitMQ 進(jìn)行確認(rèn)。
查看完整描述

1 回答

?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個贊

即使你能做到這一點(diǎn),這也是糟糕的設(shè)計(jì)。

如果用戶沒有看到消息會發(fā)生什么?您的網(wǎng)絡(luò)服務(wù)器是否無限地掛在它上面?它是否將消息“nack”回隊(duì)列?

這兩種選擇都不好。

堅(jiān)持每條消息,RabbitMQ 將開始遇到來自大量用戶的數(shù)千條未確認(rèn)消息的問題。將消息返回到隊(duì)列中,您將循環(huán)處理消息,增加 Web 服務(wù)器和 RMQ 服務(wù)器上的 CPU 資源,以及兩者之間的網(wǎng)絡(luò)流量。

這個問題更好的解決方案是將消息從RabbitMQ中拉出后存儲在數(shù)據(jù)庫中。當(dāng)它被發(fā)送到瀏覽器/被瀏覽器查看時,更新數(shù)據(jù)庫以反映這一點(diǎn)。

從我寫的尚未發(fā)表的文章中:

將消息存儲在數(shù)據(jù)庫中。

向數(shù)據(jù)庫記錄添加一個字段,說明此消息屬于誰。當(dāng)用戶稍后重新連接時,查詢數(shù)據(jù)庫以獲取該用戶當(dāng)時需要查看和發(fā)送的任何消息。

上面開始的完整過程,然后變成了這樣:

  • 用戶的瀏覽器連接到 Web 服務(wù)器上的 SignalR/Socket.io/Pusher/websockets

  • Web 服務(wù)器檢查隊(duì)列中是否有在長時間運(yùn)行的過程中發(fā)生的更新

  • 當(dāng)?shù)卿浻脩舻南⑦M(jìn)來時

    • 如果用戶已登錄,則通過websocket向用戶廣播消息

    • 如果用戶未登錄,則將消息存儲在數(shù)據(jù)庫中

  • 當(dāng)用戶再次登錄時,查詢數(shù)據(jù)庫并發(fā)送所有等待消息

這是在消息隊(duì)列的想法出現(xiàn)之前你會做的事情,對吧?現(xiàn)在您也有一個消息隊(duì)列,這應(yīng)該是您要做的。


查看完整回答
反對 回復(fù) 2021-11-08
  • 1 回答
  • 0 關(guān)注
  • 293 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號