rabbitmq中,所有生產者提交的訊息都由exchange來接受,然後exchange按照特定的策略**到queue進行儲存
rabbitmq提供了四種exchange:fanout,direct,topic,header
header模式在實際使用中較少,本文只對前三種模式進行比較。
效能排序:fanout > direct >> topic。比例大約為11:10:6
一.direct exchange
任何傳送到direct exchange的訊息都會被**到routekey中指定的queue。
1.一般情況可以使用rabbitmq自帶的exchange:」"(該exchange的名字為空字串,下文稱其為default exchange)。
2.這種模式下不需要將exchange進行任何繫結(binding)操作
3.訊息傳遞時需要乙個「routekey」,可以簡單的理解為要傳送到的佇列名字。
4.如果vhost中不存在routekey中指定的佇列名,則該訊息會被拋棄。
二.fanout exchange
任何傳送到fanout exchange的訊息都會被**到與該exchange繫結(binding)的所有queue上。
1.可以理解為路由表的模式
2.這種模式不需要routekey
3.這種模式需要提前將exchange與queue進行繫結,乙個exchange可以繫結多個queue,乙個queue可以同多個exchange進行繫結。
4.如果接受到訊息的exchange沒有與任何queue繫結,則訊息會被拋棄。
三.topic exchange
任何傳送到topic exchange的訊息都會被**到所有關心routekey中指定話題的queue上
1.這種模式較為複雜,簡單來說,就是每個佇列都有其關心的主題,所有的訊息都帶有乙個「標題」(routekey),exchange會將訊息**到所有關注主題能與routekey模糊匹配的佇列。
2.這種模式需要routekey,也許要提前繫結exchange與queue。
3.在進行繫結時,要提供乙個該佇列關心的主題,如「#.log.#」表示該佇列關心所有涉及log的訊息(乙個routekey為」mq.log.error」的訊息會被**到該佇列)。
4.「#」表示0個或若干個關鍵字,「*」表示乙個關鍵字。如「log.*」能與「log.warn」匹配,無法與「log.warn.timeout」匹配;但是「log.#」能與上述兩者匹配。
5.同樣,如果exchange沒有發現能夠與routekey匹配的queue,則會拋棄此訊息。
RabbitMQ入門及其幾種工作模式
mq全程message queue,用於應用程式和應用程式間進行通訊。rabbitmq採用erlang編寫,實現了amqp 高階訊息佇列 協議,跨平台,支援各種主流的作業系統和多種客戶端。rabbitmq相比其他同型別的訊息佇列,最大的特點在保證可觀的單機吞吐量的同時,延時方面非常出色。broker...
RabbitMQ的幾種工作模式和優化建議
1.broker 它提供一種傳輸服務,它的角色就是維護一條從生產者到消費者的路線,保證資料能按照指定的方式進行傳輸,2.exchange 訊息交換機,它指定訊息按什麼規則,路由到哪個佇列。3.queue 訊息的載體,每個訊息都會被投到乙個或多個佇列。4.binding 繫結,它的作用就是把excha...
rabbitMq的幾種佇列
這裡是rabbitmq 官網中的相關介紹 其實上篇文章末尾給出的 就是簡單佇列。乙個生產者對應乙個消費者!生產者將訊息傳送到 hello 佇列。消費者從該佇列接收訊息。乙個生產者對應多個消費者,但是只能有乙個消費者獲得訊息!競爭消費者模式。乙個生產者將訊息首先傳送到交換器,交換器繫結到多個佇列,然後...