文章目錄
- 什么是消息隊列?
- 為什么需要消息隊列
- 消息隊列的模型
- 消息隊列常見名詞
- 如何保證消息不丟失?(可靠性)
- 如何保證消息不重復/業務冪等性
- 如何保證消息有序性
- 如何處理消息堆積
- 消息隊列設計為推送還是拉取 / 推拉模式優點
- 無法路由的消息怎么處理的
- 消息什么時候會進入死信交換機
- 死信隊列有哪些應用
- 聊一聊AMQP協議
- RabbitMQ的事務機制
- RabbitMQ核心名詞
- RabbitMQ中的routing key 以及 binding key 最大長度是多少字節?
- RabbitMQ工作模式
- RabbitMQ集群模式
- RabbitMQ延遲隊列實現
什么是消息隊列?
- 異步通信
為什么需要消息隊列
-
異步處理
-
服務解耦
-
流量控制
消息隊列的模型
- 隊列模型
- 發布/訂閱 模型
消息隊列常見名詞
-
生產者 / 消費者 /Broker / 隊列 /主題
-
消息確認
-
死信隊列
-
命名服務
-
集群
-
分區和隊列
-
消費組
如何保證消息不丟失?(可靠性)
- 生產者消息確認
- 消費者消息確認
- 消息持久化
如何保證消息不重復/業務冪等性
- 消息ID去重
- 結果業務邏輯優化
如何保證消息有序性
- 順序隊列(RabbitMQ)
- 分區與順序鍵(Kafka、RocketMQ)
如何處理消息堆積
- 排除代碼原因例如BUG
- 限流 / 降級
- 消費者擴容
- 批量消費
- 異步消費
消息隊列設計為推送還是拉取 / 推拉模式優點
- 推:實時
- 拉:限流
無法路由的消息怎么處理的
- 丟棄
- 指定備份交換機(死信交換機/隊列)
- Return Listener 回退機制
消息什么時候會進入死信交換機
- 被拒絕且requeue設置為false
- 過期 ttl到期
- 超出max-length
死信隊列有哪些應用
- 拒絕消息
- 處理類似超時訂單的業務
- 隊列限流
- 實現延遲隊列
聊一聊AMQP協議
- 應用層
- 面向消息、異步
- 五大組成
- 交換機類型
- 可靠傳輸
- 對比MQTT
- 對比JMS
RabbitMQ的事務機制
- 消息發送原子性
- 發布確認模式
- 性能瓶頸
RabbitMQ核心名詞
- 生產 /消費
- 交換機
- 隊列
- Binding
- Routing Key
RabbitMQ中的routing key 以及 binding key 最大長度是多少字節?
- 255
RabbitMQ工作模式
- simple
- work
- 發布 /訂閱
- routing
- topic
- rpc
- 發布 /確認
RabbitMQ集群模式
- 標準集群
- 鏡像集群
- 聯邦集群
RabbitMQ延遲隊列實現
- 死信隊列+TTL
- 延遲消息插件