## 相關概念
整體架構模型:

### 生產者發送流程
1. 生產者連接到 RabbitMQ Broker,建立一個 Connection,開啟一個 Channel(信道)
2. 生產者聲明一個 Exchange 并設置相關屬性
3. 生產者聲明一個 Queue 并設置相關屬性
4. 生產者通過路由鍵將 Exchange 和 Queue 綁定起來
5. 生產者發送消息至 RabbitMQ Broker,包含路由鍵、Exchange 等信息
6. 相應的 Exchange 根據接收的路由鍵查找匹配隊列
7. 如果找到,則將從生產者發送過來的消息存入相應隊列中
8. 如果沒找到,根據生產者配置的屬性選擇丟棄還是回退給生產者
9. 關閉 Channel
10. 關閉連接
### 消費者接收流程
1. 消費者連接到 RabbitMQ Broker,建立一個 Connection,開啟一個 Channel(信道)
2. 消費者向 RabbitMQ Broker 請求消費相應隊列中的消息,可能會設置相應的回調函數以及做一些準備工作
3. 等待 RbbitMQ Broker 回應并投遞相應對呀中的消息,消費者接收消息
4. 消費者確認(ack)接收到的消息
5. RabbitMQ 從隊列中刪除相應已確認的消息
6. 關閉信道
7. 關閉連接
### 交換器
#### 類型
- fanout(扇形):將所有發送到該交換器的消息路由到所有 與該交換器綁定的隊列中,無差別廣播
- direct(直連):BindingKey 和 RoutingKey 完全匹配的隊列
- topic(主題):RoutingKey 和 BindingKey 都用 `.` 分隔字符串(被`.`分隔開的每一段獨立字符串稱為一個單詞),BingdingKey 中存在兩種特殊字符串 `*` 和 `#`。`*`匹配一個單詞,`#`用于匹配多規格單詞(也可以是零個)
- headers:根據消息內容中的 `headers` 屬性進行匹配。性能很差,也不實用,基本上看不見它的存在