目錄
前置知識:RabbitMQ 的介紹
一、單機安裝 RabbitMQ 4.0.7版本
1.1 在線拉取鏡像
二、延遲插件的安裝
2.1 安裝延遲插件
步驟一:下載延遲插件
步驟二:將延遲插件放到插件目錄
步驟三:啟動延遲插件
步驟四:重啟 RabbitMQ 服務
步驟五:驗收成果
步驟六:手動創建延遲交換機(可選)
前置知識:RabbitMQ 的介紹
RabbitMQ 是一個開源的 ?消息代理(Message Broker)?,實現了 ?AMQP(Advanced Message Queuing Protocol)?? 協議,用于在分布式系統中異步傳遞消息。
- ?核心角色?:生產者(Producer)、消費者(Consumer)、隊列(Queue)、交換機(Exchange)。
- ?核心優勢?:解耦、異步、削峰填谷、可靠性。
常見的MQ消息中間件有很多,例如ActiveMQ
、RabbitMQ
、Kafka
、RocketMQ
等等。那么為什么我們要使用它呢?因為它能很好的幫我解決一些復雜特殊的場景:
1?? 高并發的流量削峰
舉個例子,假設某訂單系統每秒最多能處理一萬次訂單,也就是最多承受的10000qps,這個處理能力應付正常時段的下單時綽綽有余,正常時段我們下單一秒后就能返回結果。但是在高峰期,如果有兩萬次下單操作系統是處理不了的,只能限制訂單超過一萬后不允許用戶下單。使用消息隊列做緩沖,我們可以取消這個限制,把一秒內下的訂單分散成一段時間來處理,這時有些用戶可能在下單十幾秒后才能收到下單成功的操作,但是比不能下單的體驗要好。
2?? 應用解耦
以電商應用為例,應用中有訂單系統、庫存系統、物流系統、支付系統。用戶創建訂單后,如果耦合調用庫存系統、物流系統、支付系統,任何一個子系統出了故障,都會造成下單操作異常。當轉變成基于消息隊列的方式后,系統間調用的問題會減少很多,比如物流系統因為發生故障,需要幾分鐘來修復。在這幾分鐘的時間里,物流系統要處理的內存被緩存在消息隊列中,用戶的下單操作可以正常完成。當物流系統恢復后,繼續處理訂單信息即可,中單用戶感受不到物流系統的故障,提升系統的可用性。
3?? 異步處理
有些服務間調用是異步的,例如 A 調用 B,B 需要花費很長時間執行,但是 A 需要知道 B 什么時候可以執行完,以前一般有兩種方式,A 過一段時間去調用 B 的查詢 api 查詢。或者 A 提供一個 callback api, B 執行完之后調用 api 通知 A 服務。這兩種方式都不是很優雅,使用消息隊列,可以很方便解決這個問題,A 調用 B 服務后,只需要監聽 B 處理完成的消息,當 B 處理完成后,會發送一條消息給 MQ,MQ 會將此消息轉發給 A 服務。這樣 A 服務既不用循環調用 B 的查詢 api,也不用提供 callback api。同樣B 服務也不用做這些操作。A 服務還能及時的得到異步處理成功的消息。
4?? 分布式事務
以訂單服務為例,傳統的方式為單體應用,支付、修改訂單狀態、創建物流訂單三個步驟集成在一個服務中,因此這三個步驟可以放在一個jdbc事務