A. JMS 模型
JMS 中定義了點對點和發布訂閱兩種消息模型,原來以為 AMQP 協議中 direct Exchange 對應點對點模型,topic Exchange 對應發布訂閱模型,fanout Exchange 對應簡化的發布訂閱模型。可學習下來,發現根本不是那么一回事。
實際上,用三種 Exchange 都可以實現點對點與發布訂閱模型。
點對點模型:
- direct Exchange:創建隊列A,通過任意綁定鍵綁定到 Exchange,消息發送使用相同的綁定鍵
- fanout Exchange:創建隊列A,綁定到 Exchange
- topic Exchange:創建隊列A,通過任意綁定鍵綁定到 Exchange,消息發送使用相同的綁定鍵
發布訂閱模型:
- direct Exchange:創建多個隊列,通過為每個隊列設定多個綁定,也能實現相對復雜的發布訂閱模型
- fanout Exchange:創建多個隊列,綁定到 Exchange,這是簡化的發布訂閱模型
- topic Exchange:創建多個隊列,通過帶通配符的綁定鍵實現復雜而又靈活的發布訂閱模型
簡而言之,AMQP 不按 JMS 那一套玩法玩。說白了,AMQP 中所有的隊列都遵照 JMS 中的點對點模型,發布訂閱實質上是通過 Exchange 的邏輯將消息復制到多個隊列來實現的。
B. 好文推薦
好的文章,幾張圖就能讓你深入理解一個系統。推薦閱讀:http://blog.csdn.net/lizhitao/article/details/47723105
只拿一張圖作分析:
這是 RabbitMQ 實現發布訂閱的邏輯圖。每個訂閱組訂閱自己感興趣的消息類型,它從一個獨占的隊列中獲取這些消息。訂閱組內部多個消費者共同分擔這些消息的處理。消息發布者將消息發送到 Exchange,由 Exchange 負責將每條消息分發到正確的隊列中(可能會同時分發到多個隊列)。