RabbitMQ

Exchange

exchange 包含4中類型, direct, topic,fanout,header

  • direct :
    exchage 和 queue 進(jìn)行 binding 時(shí)會(huì)設(shè)置 routingKey ,

    channel.QueueBind(queue: "create_pdf_queue",
                    exchange: "pdf_events",
                    routingKey: "pdf_create",
                    arguments: null);
    

    然后,消息發(fā)送時(shí)也會(huì)設(shè)置對(duì)應(yīng)的 routingKey , 只有兩個(gè) routingKey 完全相同,exchange才會(huì)選擇對(duì)應(yīng)的 binding 進(jìn)行消息路由。

    channel.BasicPublish(exchange: "pdf_events",
                        routingKey: "pdf_create",
                        basicProperties: properties,
                        body: body);
    
  • topic
    類似 direct exchange , 只是此模式 routingKey 可以使用通配符 '*','#'.

  • fanout
    將消息路由到所有綁定的隊(duì)列中, 無(wú)需對(duì)消息的 routingKey 進(jìn)行匹配操作。

  • header
    路由規(guī)則是根據(jù) header 進(jìn)行判斷,header 就是下面的 arguments 參數(shù)。

    Dictionary<string, object> aHeader = new Dictionary<string, object>();
    aHeader.Add("format", "pdf");
    aHeader.Add("type", "report");
    aHeader.Add("x-match", "all");
    channel.QueueBind(queue: "queue.A",
                    exchange: "agreements",
                    routingKey: string.Empty,
                    arguments: aHeader);
    

    其中 x-match 為特殊的 header , all 表示匹配所有的 header ,如果為 any 表示只要匹配其中一個(gè) header 即可。
    發(fā)布消息時(shí)傳入 header 值。

    var properties = channel.CreateBasicProperties();
    properties.Persistent = true;
    Dictionary<string, object> mHeader1 = new Dictionary<string, object>();
    mHeader1.Add("format", "pdf");
    mHeader1.Add("type", "report");
    properties.Headers = mHeader1;
    channel.BasicPublish(exchange: "agreements",
                    routingKey: string.Empty,
                    basicProperties: properties,
                    body: body);
    

總結(jié)

一般來(lái)說(shuō)direct和topic用來(lái)具體的路由消息,如果要用廣播的消息一般用fanout的exchange。
header類型用的比較少,但還是知道一點(diǎn)好。

參考文檔

https://www.cnblogs.com/julyluo/p/6265775.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,654評(píng)論 19 139
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 16,209評(píng)論 2 11
  • 一發(fā)一存一消費(fèi),沒(méi)有最好的消息隊(duì)列中間件(簡(jiǎn)稱消息中間件),只有最合適的消息中間件。消息隊(duì)列常用的使用場(chǎng)景: 非實(shí)...
    ohcomeyes閱讀 2,077評(píng)論 0 5
  • RocketMQ是一款分布式、隊(duì)列模型的消息中間件,具有以下特點(diǎn): 能夠保證嚴(yán)格的消息順序 提供豐富的消息拉取模式...
    AI喬治閱讀 2,200評(píng)論 2 5
  • 來(lái)源 RabbitMQ是用Erlang實(shí)現(xiàn)的一個(gè)高并發(fā)高可靠AMQP消息隊(duì)列服務(wù)器。支持消息的持久化、事務(wù)、擁塞控...
    jiangmo閱讀 10,513評(píng)論 2 34

友情鏈接更多精彩內(nèi)容