AMQP協(xié)議中的核心思想就是生產(chǎn)者和消費(fèi)者隔離,生產(chǎn)者從不直接將消息發(fā)送給隊(duì)列。生產(chǎn)者通常不知道是否一個(gè)消息會(huì)被發(fā)送到隊(duì)列中,只是將消息發(fā)送到一個(gè)交換機(jī)。先由Exchange來接收,然后Exchange按照特定的策略轉(zhuǎn)發(fā)到Queue進(jìn)行存儲(chǔ)。同理,消費(fèi)者也是如此。Exchange 就類似于一個(gè)交換機(jī),轉(zhuǎn)發(fā)各個(gè)消息分發(fā)到相應(yīng)的隊(duì)列中。
RabbitMQ提供了四種Exchange模式:fanout,direct,topic,header 。 header模式在實(shí)際使用中較少,本文只對(duì)前三種模式進(jìn)行比較。
一. Fanout Exchange
所有發(fā)送到Fanout Exchange的消息都會(huì)被轉(zhuǎn)發(fā)到與該Exchange 綁定(Binding)的所有Queue上。
Fanout Exchange 不需要處理RouteKey 。只需要簡(jiǎn)單的將隊(duì)列綁定到exchange 上。這樣發(fā)送到exchange的消息都會(huì)被轉(zhuǎn)發(fā)到與該交換機(jī)綁定的所有隊(duì)列上。類似子網(wǎng)廣播,每臺(tái)子網(wǎng)內(nèi)的主機(jī)都獲得了一份復(fù)制的消息。
所以,F(xiàn)anout Exchange 轉(zhuǎn)發(fā)消息是最快的。
/// <summary> /// 生產(chǎn)者 /// </summary> /// <param name="change"></param> private static void ProducerMessage(MyMessage msg) { var advancedBus = CreateAdvancedBus(); if (advancedBus.IsConnected) { var exchange = advancedBus.ExchangeDeclare("user", ExchangeType.Fanout); advancedBus.Publish(exchange, "", false, new Message<MyMessage>(msg)); } else { Console.WriteLine("Can't connect"); } } /// <summary> /// 消費(fèi)者 /// </summary> private static void ConsumeMessage() { var advancedBus = CreateAdvancedBus(); var exchange = advancedBus.ExchangeDeclare("user", ExchangeType.Fanout); var queue = advancedBus.QueueDeclare("user.notice.wangwu"); advancedBus.Bind(exchange, queue, "user.notice.wangwu"); advancedBus.Consume(queue, registration => { registration.Add<MyMessage>((message, info) => { Console.WriteLine("Body: {0}", message.Body); }); }); }
名稱欄目:基于RabbitMQ幾種Exchange模式詳解-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://www.chinadenli.net/article12/ijedc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、微信小程序、軟件開發(fā)、移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容