異步的常見形態:
- 通知:單向請求,你對他放電,他爲你絕緣
- 請求/異步相應:客戶端發送請求到服務端,服務端異步響應請求,客戶端不會阻塞,而且被設計成默認相應,不會立刻送達
- 消息:利用消息可以實現一對多的交互,比如發佈-訂閱模式
MQ的應用場景:
- 異步處理:比如用戶註冊之後,需要發短信和加積分,註冊信息寫入數據庫後通過異步消息讓短信服務和積分服務去做他們的事,提升用戶體驗
- 流量削峯:常見於秒殺場景,訪問過大導致流量劇增甚至掛掉。一般在應用前端加入消息隊列控制用戶數量,如果超出,則拋棄用戶請求,或者讓他跳轉到錯誤頁面,再做控制處理
- 日誌處理:最典型的就是kafka,這個消息隊列設計的時候就是用戶日誌處理
- 應用解耦:用戶下單後,訂單服務通知商品服務,訂單持久化處理,消息寫入隊列,讓商品服務來訂閱這個消息,再做對應操作。
使用RabbitMQ
1.引入依賴
配置文件(可以直接放在配置中心中)
建一個類,接收MQ消息
此處用到一個註解:@RabbitListener
再寫一個發送消息
發送主要用到AmqpTemplate.convertAndSent()
在mq控制檯新建這個隊列
改進(能不能自動幫我建隊列,不用我自己去控制檯建)
在接收mq消息的地方,這樣寫
改進2(自動創建隊列並自動綁定Exchange)
消息的分組
訂單服務發送消息,發送給數碼服務和水果服務,但是他們只接受自己的服務,這裏就涉及到了消息的分組
數碼服務的接收方:
添加key屬性,表名自己是哪一個服務
數碼服務的接收方:
添加key屬性,表名自己是哪一個服務
消息發送方修改:
修改key爲想發送的服務