【朝夕技術(shù)??縍abbitMQ路由解析(上篇)

歡迎大家閱讀《朝夕Net社區(qū)技術(shù)專刊》
我們致力于.NetCore的推廣和落地,為更好的幫助大家學(xué)習(xí),方便分享干貨,特創(chuàng)此刊!很高興你能成為忠實讀者,文末福利不要錯過哦!
上篇文章介紹了如何在C#控制臺基于RabbitMQ搭建生產(chǎn)者,消費者。這篇文章將會持續(xù)進(jìn)階RabbitMQ的使用;這里將會給大家聊聊RabbitMQ中的路由;
什么是路由呢?就和你們家里的路由器是一個概念,路由器就是把網(wǎng)絡(luò)信號做轉(zhuǎn)發(fā)、那么RabbitMQ中的路由,就是把消息做轉(zhuǎn)發(fā);在本篇文章中,如果出現(xiàn)圖片不清晰的,請關(guān)注朝夕教育公眾號可獲取關(guān)于RabbitMQ的視頻錄播學(xué)習(xí);
RabbitMQ一共提供了四種路由:
??Direct類型
??Fanout類型
??Topic類型
??Header類型
1.PARTDirect類型的路由:

上一篇文章中寫的RabbitMQ的基本應(yīng)用案例中使用的Exchange就是direct類型的,direct類型的exchange路由規(guī)則很簡單:
exchange在和queue進(jìn)行binding時會設(shè)置routingkey(為了避免和下邊的routingKey混淆,很多時候把這里的routingKey叫做BindingKey)
channel.QueueBind(queue:"Q1",exchange:"myexchange",routingKey:"orange");將消息發(fā)送到Broker時會設(shè)置對應(yīng)的routingkey:channel.BasicPublish(exchange:"myexchange",routingKey:"orange",basicProperties: null, body: body);
只有RoutingKey和BindingKey完全相同時,exchange才會把消息路由到綁定的queue中去。
我們知道了direact類型的交換機只有routingKey和bindingKey相同的時候才會進(jìn)行消息路由,根據(jù)這一特點我們可以通過routingKey將消息路由到不同的queue中。如在進(jìn)行日志處理時,需求是所有的日志都保存到文本文件,出現(xiàn)錯誤日志時則還需要短信通知以便及時處理。
我們可以創(chuàng)建兩個隊列:只接收錯誤日志的log_error隊列和接收所有日志信息的log_all隊列。消費者C1處理log_error隊列中消息,將這些消息通過短信通知管理員,消費者C2處理log_all隊列的信息,將這些信息記錄到文本文件。如下圖所示:

生產(chǎn)者用于發(fā)送日志消息,代碼下圖所示:

如果圖片不清晰,請關(guān)注朝夕net社區(qū)微信公眾號獲取視頻錄播
消費者C1用于處理log_error隊列中的消息,錯誤消息進(jìn)行短信通知,代碼如下:

消費者C2用于處理log_all隊列中的消息,所有消息記錄到文本文件中,代碼下圖所示:

?生產(chǎn)者,消費者同時運行起來,結(jié)果如圖6:
2.PARTFonout類型的路由:
fanout類型的exchange路由規(guī)則是最簡單的,交換機會把消息廣播到與該Exchange綁定的所有queue中,即所有和該exchange綁定的隊列都會收到消息。fanout類型exchange和隊列綁定時不需要指定routingKey,即使指定了routingKey也會被忽略掉。路由結(jié)構(gòu)如下圖:

fanout類型交換機主要用于發(fā)布/訂閱的一些場景,如用戶注冊了我們的網(wǎng)站后,我們通過短信和郵件兩種方式通知用戶;
?代碼如下圖:
這里通過代碼簡單演示將消息同時使用短信和郵件兩種方式通知用戶的流程。首先聲明一個fanout類型的exchange,然后聲明兩個隊列 SMSqueue和EMAILqueue,這兩個隊列都和這個exchange綁定。消費者1處理EMAILqueue的消息,通過郵件方式發(fā)送通知;消費者2處理SMSqueue的消息通過短信方式發(fā)送通知。
生產(chǎn)者代碼:

消費者1將EMAILqueue的消息通過郵件方式發(fā)送通知,代碼如下圖:

?消費者2將SMSqueue的消息通過短信方式發(fā)送通知,代碼如下圖:

啟動這三個應(yīng)用程序,執(zhí)行結(jié)果如下圖

?下期預(yù)告
【朝夕Net社區(qū)技術(shù)??縍abbitMQ路由解析(下篇)

本期福利

往期精彩:
【朝夕技術(shù)??緾ore3.1WebApi_Filter-Authorize詳解
【朝夕技術(shù)??緾ore3.1WebApi_Filter多種注冊方式支持依賴注入
【朝夕技術(shù)??縒ebApi部署多服務(wù)器配置Nginx負(fù)載均衡
【朝夕技術(shù)??空揙RM之EFCore初篇(快速基于本地數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)操作)
【朝夕技術(shù)??空揙RM框架—EntityFrameworkCore
