在程序開發中,有很多地方都需要用到消息隊列,rabbitmq是其中的一種消息隊列。rtmq有exchange,路由,隊列組成。當生產者產生了一個消息之後,會進到exchange,然後根據路由綁定特定的隊列,由消費者從隊列中取消息進行消費。
exchange的幾種類型
- 扇形
- default 默認類型
- 直連
- topic 基於路由,* 匹配一個,#匹配多個
- 路由交換機,跟topic類似,根據路由鍵綁定特定隊列
- 頭交換機,根據消息的header數據
rabbitmq的幾種工作模式
- 一對一 ,簡單模式,基於默認交換機
- 一對多,但是隻有一個消費者可以消費,工作模式,也是基於默認交換機
- 發佈訂閱 一個消息被多個消費者消費,重複消費,適用場景,羣發消息
- 路由模式,特定的交換機綁定特定的隊列消費
- 主題模式,基於topic交換機,*匹配一個,#匹配多個
rabbitmq的適用場景
- 併發,有併發需求的時候,先讓併發請求進入消息隊列,然後由程序從消息隊列一個一個消費處理
- 異步,像發短信通知,這個就可以直接丟到消息隊列,不用管這個結果,把同步的事情,變成異步,減少等待
- 減少數據庫的壓力,如果大量請求,需要訪問數據庫,可能會對數據庫造成壓力,放到消息隊列之後,可以有程序根據數據的承載情況,分批從消息隊列中取消息處理,減輕數據庫壓力
- 解耦,比如ABC三個系統,B,C兩個系統都依賴於A系統,這時候,如果有D系統也需要依賴於A系統,那麼就需要修改A系統的代碼,這樣在生產中,對A系統就不友好,如果用消息隊列,就可以讓BCD直接依賴於消息隊列,而不具體依賴於A系統,就不用修改A系統的代碼。減少依賴,有點類似於IOC,不依賴於具體實現,只依賴抽象接口。