二、work queues
三、publish/subscribe (發布/訂閱)
三、routing 路由
四、topic
3、4、5這三種都屬於訂閱模型,只不過進行路由的方式不同:
exchange(交換機):生產者將訊息傳送到交換器,交換器根據路由規則將訊息路由乙個或多個佇列中。而路由規則受 exchange 的型別和繫結(binding) 關係
的影響
訊息模型
exchange型別
routing-key
binding-key
publish/subscribe 發布/訂閱
fanout––
routing
direct
= bindingkey
匹配值topics
topic
萬用字元匹配
指定匹配規則
-基本用不到
headers
訊息的headers的鍵值對匹配
鍵值對匹配規則 匹配規則x-match(all / any)
訊息一旦被消費者接收,佇列中的訊息就會被刪除。
回執ack 分兩種情況:
選擇方式:
channe.basicconsume(queue_name, true, consumer);
第二個引數為true,則會自動進行ack;如果為false,則需要手動ack
work queues,也稱 task queues (任務模型–能者多勞)
rabbitmq通過exchange可以支援多訂閱,當rabbitmq需要支援多訂閱時,生產者傳送的訊息通過路由同時寫到多個queue,不同消費者都可以消費此訊息。
fanout exchange
會將訊息分發給所有繫結到此 exchange 的queue中,不管 queue中的 route key。如果有 n 個 queue 繫結到 乙個 fanout exchange 時,那麼此時 exchange 收到訊息時,會將此訊息分發到 這 n 個 queue中,由於此性質, fanout exchange 也常用訊息的廣播。
exchange(交換機):生產者將訊息傳送到交換器,交換器根據路由規則將訊息路由乙個或多個佇列中。而路由規則受 exchange 的型別和繫結(binding) 關係
的影響
direct exchange
根據訊息攜帶的 routing key 將訊息投遞到不同的 queue中,direct exchange 適用於訊息的單播發送。工作流程如下:
direct exchange 經常用於在 多個 worker 中分配任務,當這樣做時,需注意,在amqp 0-9-1中,息的負載均衡發生在 consumer之間,而不是在 queue之間。
路由規則受 exchange 的型別和繫結(binding) 關係
的影響
topic exchange
會根據 route key 將訊息分發到與此訊息的 route key相匹配的並且繫結此exchange的乙個或多個 queue。這裡的**「相匹配」**與 direct exchange的完全匹配的路由規則不一樣,topic exchange 在匹配規則上進行了擴充套件,規則如下:
topic exchange
經常用於實現 publish/subscribe模型,即訊息的多播模型。前面介紹訊息模型也曾提到過訊息中介軟體一般有兩種模式:點對點模式和發布/訂閱模式。這裡的topic exchange就適用於發布/訂閱模型。rabbitmq的乙個原則就是,訊息不能直接投遞到 queue中,必須先將訊息投遞到 exchange中,然後由exchange 按照路由規則將訊息投遞到對應的 queue中。至於點對點模型就可以用 direct exchange來實現,利用完全匹配的路由規則。
RabbitMQ的五種訊息模型
乙個生產者,乙個佇列 乙個消費者 乙個生產者 乙個佇列 多個消費者。乙個訊息只能被消費一次。乙個生產者 乙個交換機 多個列隊 多個消費者 乙個訊息可以被多個消費者消費 生產者發生訊息只能傳送到交換機。乙個生產者 乙個交換機 多個佇列 多個消費者 routing key 乙個訊息傳送給符合 routi...
RabbitMQ 五種佇列大綱
乙個生產者對應乙個消費者,有訊息即取走 缺點 耦合性高,乙個消費者一 一對應乙個生產者 改進之後,當然是乙個生產者對應多個消費者 有輪詢分發機制,就是無論消費者處理業務邏輯快慢,分發一樣的訊息給消費者 公平分發機制,根據消費者處理業務邏輯的 快慢分發,根據手動返回ack值,關閉自動傳送 問題 返回機...
五種IO模型
再講io模型之前,給大家舉乙個釣魚的例子。張三去釣魚,他釣魚的時候一動不動,一直看著魚竿,看有沒有動,無論是誰叫他,他都不動,只有等魚梢動了 魚上鉤了 他才會動 李四去釣魚,他沒有像張三那樣瓷楞著,只是時不時的輪詢檢查魚竿有沒有動。一直在動。王五也來釣魚,他就比較聰明了,在魚竿上掛個鈴鐺,只要鈴鐺響...