一、簡介
1、消息中間件:利用高效可靠的消息傳遞機制進行和平臺不耦合的數據交流,利用數據通信來進行分佈式系統的集成。由JMS發展而來。
2、rabbitMQ:採用Erlang語言實現AMQP的消息中間件,用在分佈式系統中存儲轉發消息。整體模型架構如下:
- producer:生產者,發送消息的那方,消息包含消息體(payload)和標籤
- Consumer:消費者,接收消息的那方,只得消息體,標籤在路由過程丟棄,消費者不知道誰是生產者
- Exchange:交換器,將消息路由到一或多個隊列,有多種類型
- Queue:隊列,存儲消息的地方
- Broker:服務節點,相當於生產者和消費者的中介
- RoutingKey:路由鍵,消息的路由規則
- Binding:綁定,關聯交換器和隊列,BindingKey匹配上RoutingKey時,消息就到指定的隊列,部分交換器類型纔有用,比如fanout類型下就沒用
二、分類
1、點對點(P2P)模式:基於隊列,生產者發送消息到隊列,消費者從隊列中接收
2、發佈/訂閱(Pub/Sub)模式:基於topic,發佈者發送消息到某主題,訂閱者從主題中訂閱消息
三、交換器類型
1、fanout:把消息路由到所有綁定的隊列,都收到一份
2、direct:根據RoutingKey投遞到相應的隊列
3、topic:使用通配符的方式投遞相應的隊列
4、headers:根據消費的headers屬性來匹配 Queue 和 Exchange 綁定時指定的鍵值對
四、工作過程
1、生產者
- Producer連接Broker,建立Connection,開啓Channel
- Producer聲明一個Exchange,設置屬性
- Producer聲明一個Queue,設置屬性
- Producer通過RoutingKey將Exchange和Queue兩者Binding
- Producer發送消息到Broker,包括RoutingKey、Exchange等信息
- Exchange根據接收的RoutingKey找到匹配的Queue
- 找到後,將消息存入,找不到則根據配置選擇丟棄或者回退
- 關閉Channel和Connection
2、消費者
- Consumer連接Broker,建立Connection,開啓Channel
- Consumer向Broker請求消費Queue中的消息,可設置回調函數
- 等待,接收消息
- Consumer ack接收到的消息
- rabbitMQ刪除隊列中被 ack 的消息
- 關閉Channel和Connection