RabbitMQ消息模型
Rabbit MQ作為按照AMQP協(xié)議實現(xiàn)的老牌消息中間件,已經(jīng)有將近十年的歷史了。誕生于金融行業(yè),現(xiàn)在作為企業(yè)級消息隊列廣泛用在各個領(lǐng)域。最近因為工作關(guān)系接觸到了Rabbitmq,對其工作方式做了大致了解。
生產(chǎn)者將消息發(fā)送到mq之后,會首先經(jīng)過exchange,由exchange決定如何將消息路由到對應的隊列。路由方式有以下4種。
fanout 也即廣播模式,exchange收到消息后將會把消息投遞到每個和它綁定的隊列
direct 消息按照指定的routing key(queue和exchange綁定時可指定)直接投遞到到隊列
topic 復雜的發(fā)布/訂閱模式。routing key由.號分隔的字符串指定,如quick.orange.rabbit,每個分隔的字符串最好能對應一定的業(yè)務含義。支持模糊匹配,如*.orange.rabbit或如quick.orange.#。*精確匹配一個字符串,#匹配0個或多個字符串。
headers 按照消息頭投遞到隊列,不考慮routing key
消息者收到消息之后,會按照默認開啟的手動確認模式向MQ投遞ack消息,代表消費者已經(jīng)成功處理了這條消息,MQ可以將這條消息從隊列中刪除。沒有收到確認的消息仍會存在于隊列中,等待下次繼續(xù)投遞。
當一個隊列有多個消費者訂閱時,MQ默認逐個分發(fā)給每個消費者,而不管其處理的任務復雜度,若要做到消息的公平派發(fā),需要消費者指定prefetch_count=1,告訴MQ在處理完當前消息之前不要派發(fā)下條消息過來。
更多的細節(jié)可以參考Rabbitmq的官方文檔
本文轉(zhuǎn)載自異步社區(qū)
架構(gòu)設計
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。