RabbitMQ 實踐經驗與常見問題

2022-01-17 07:28:42 字數 1126 閱讀 7577

生產者傳送訊息到broker的可靠性

服務端確認機制

交換機的可靠性(路由保證)

佇列的可靠性

消費端的可靠性

消費者確認機制

為什麼訊息會重複?

消費端**響應:假如生產者未收到**,重發(重發間隔、重發次數)。

如何冪等處理訊息

業務訊息必須有唯一的業務id,訊息id。即msgid、bizid。

資料庫中的唯一業務id保證冪等。

redis存訊息id保證冪等。

rabbitmq集群

集群目的:高可用、負載拓展

集群如何識別:通過erlang.cookie

集群節點型別:disc(元資料儲存在磁碟中)、ram(元資料在記憶體中)。至少需要乙個磁碟節點。

vrrp 虛擬路由冗餘協議

keepalived:負載、高可用

誰來建立exchange、queue:消費者

訊息佇列的作用和使用場景

削峰、非同步、解耦

channel和vhost的作用是什麼

復用連線、vhost提公升硬體利用率,資源隔離

rabbitmq有哪些路由方式,適合在什麼場景使用

direct、topic、fanout、headers

交換機和佇列、佇列和消費者的繫結關係

多對多無法被路由的訊息去了**

備份交換機;假如設定了mandatory為true,有**訊息;假如沒其他措施,則會丟失

訊息在什麼時候會變成死信

訊息被拒絕;訊息到達過期時間;佇列已滿。

rabbitmq怎麼實現延遲佇列

通過死信佇列+ttl,訊息過期後會到死信交換機中,進一步到達死信佇列。

訊息丟失?

傳送者->交換機->佇列->消費者,從整個鏈路分析

乙個佇列最多可以存多少條訊息

取決於硬體配置,和最大數量引數。

如何提高消費速率

增加消費者

如何動態建立消費者和佇列

在listenercontainer設定消費者數量

保證訊息順序性

乙個佇列對應乙個消費者

訊息堆積怎麼處理

尋找堆積的原因,**問題重啟。速率問題,優化**。清空佇列之後重發訊息。

mq選型分析

git gerrit 實踐經驗

用git一段時間,體驗還是比較好。尤其沒次改一批檔案,檔案列表非常清晰。和gerrit結合,diff,review 都非常方便,尤其你不需要自己手動提交到伺服器 有些缺點 如果多人改同乙個目錄,不是很方便。有些體驗如下 1 工作前都用 repo start dev 開始乙個branch 再工作 2 ...

Socket 網路程式設計實踐經驗

會話過期問題 同步還是非同步問題 資料快取問題 完全斷開連線問題 首先通過對比法來了解兩者不同的特性 下面列出在生產專案中應用 socket 所需要注意的幾點 網路斷開重連問題 連線會話和身份認證問題 同步和非同步問題 資料快取問題 完全斷開連線問題 的確,socket 連線在理想的網路環境下是持久...

專案管理各環節實踐經驗

開始做專案是一件令人激動的事情,專案組的每個成員都面臨著新的機會和挑戰。但同時也多少有些令人不安,大家都會考慮這樣乙個問題 我們如何按時完成乙個高質量的專案?因為在專案開始之前往往存在許多不確定的因素,它們也許會一直持續到整個專案結束。所以在專案準備階段,也有許多任務作要做。前提條件與主要任務 開始...