基礎
producer broker vhost exchange queen customer
- 路由:更靈活,
- 權限管理
- 高可用隊列
- TTL:
- direct 直連模式 即:==
- topic # *:通配符 主題模式 即:like
- * 僅代表一個單詞
- # 代表任意個單詞
- 廣播
環境:springboot
監聽消息
@RabbitListener(bindings = {@QueueBinding(value = @Queue(value = OmsConstantsUtil.QUEEN_OMS_CALLBACK), exchange = @Exchange(value = OmsConstantsUtil.EXCHANGE_OMS_CALLBACK), key = OmsConstantsUtil.KEY_OMS_CALLBACK)})
發佈消息:
@Autowired
private RabbitTemplate rabbitTemplate;
rabbitTemplate.convertAndSend(OmsConstantsUtil.EXCHANGE_OMS_CALLBACK, OmsConstantsUtil.KEY_OMS_CALLBACK, message);
高級應用:
- 延時隊列 (削峯)
- 死信隊列 : 可以實現延時隊列
比如:消息超時,消息被消費者拒絕並且未設置重回隊列、隊列達到最大長度,超過了 Max length等
可靠性投遞經驗
發送端:服務端確認接收機制
事務模式:但吞吐量太低,同步阻塞模式
單條確認模式:
批量確認模式:先發送,再確認 有風險
邊發送,邊確認
路由保證:
路由到隊列
消費者消費環節:
自動ACK
接收到信息,就發送ACK
手動ACK
問題:
channel:減少TCP連接,類似 連接池
Vhost:分區,例如:local dev
無法被路由的消息:直接丟棄
如何發給多個服務器消息
定義多個connectionfactory template listenerContainer
如何實現延遲隊列
TTL + 死信隊列
plugin插件
如何提高消費速度
增加消費者
動態增加消費者
container
保證消息的順序性
一個隊列只有一個消費者
大量消息堆積
MQ選型維度
1、使用 管理
2、 性能 併發 吞吐 消息堆積
3、功能
4、可用 持久化 集羣
如何設計MQ
首先 存儲、轉發 通信協議 推或拉 等功能性需求
其次:高可用 等非功能需求