AMQP協(xié)議中的核心思想就是生產(chǎn)者和消費(fèi)者隔離,生產(chǎn)者從不直接將消息發(fā)送給隊(duì)列。生產(chǎn)者通常不知道是否一個(gè)消息會(huì)被發(fā)送到隊(duì)列中,只是將消息發(fā)送到一個(gè)交換機(jī)。先由Exchange來(lái)接收,然后Exchange按照特定的策略轉(zhuǎn)發(fā)到Queue進(jìn)行存儲(chǔ)。同理,消費(fèi)者也是如此。Exchange 就類似于一個(gè)交換機(jī),轉(zhuǎn)發(fā)各個(gè)消息分發(fā)到相應(yīng)的隊(duì)列中。
成都創(chuàng)新互聯(lián)公司:2013年至今為各行業(yè)開(kāi)拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為近千家公司企業(yè)提供了專業(yè)的做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)站推廣服務(wù), 專業(yè)公司由設(shè)計(jì)師親自精心設(shè)計(jì),設(shè)計(jì)的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺(jué)效果,策劃師分析客戶的同行競(jìng)爭(zhēng)對(duì)手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。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ā)消息是最快的。
////// 生產(chǎn)者 /// /// 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(msg)); } else { Console.WriteLine("Can't connect"); } } /// /// 消費(fèi)者 /// 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((message, info) => { Console.WriteLine("Body: {0}", message.Body); }); }); }