日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ学习之Routing(4)

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ学习之Routing(4) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一節,是廣播日志message到很多的receivers.

這節,我們講訂閱其中的一個子集。例如,我們想可以把危機的error message導到log file。而仍然可以打印所有的log messages到控制臺。

這里使用到Direct exchage

Direct exchange

在使用fanout exchange時,沒有很多的靈活性,它只是廣播。

這節,我們將使用direct exchange . 在direct exchange背后的路由算法是簡單的,即message會發送到一個binding key 正好匹配messagerouting keyqueue.

如圖

我們可以看到,有兩個queue綁定到exchange了。第一個queue是和binding keyorange的綁定的。并且第二個有兩個bindings.一個是black,另一個是green.

帶有routing key 為orange的發送到exchangemessage將會發送到queue Q1

routing keyblack greenmessages將會發送到Q2. 其他的messages會被丟棄。

Multiple binding(多重綁定)

如圖,多重綁定,即一個binding key為black綁定到兩個queue.

Emitting logs

我們會把日志嚴重級別(log severity)作為routing key. 那樣,接收腳本將會選擇它想要接收的嚴重級別進行接收。

channel.ExchangeDeclare(exchange: "direct_logs", type: "direct"); var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "direct_logs",routingKey: severity,basicProperties: null,body: body);

嚴重級別(Severity

info, warning, error

Subscribing

接收程序跟之前大致一樣,除了一個例外,我們將會為我們感興趣的嚴重級別(serverity)創建一個新的binding.?

var queueName = channel.QueueDeclare().QueueName; foreach(var severity in args) {channel.QueueBind(queue: queueName,exchange: "direct_logs",routingKey: severity); }

代碼

EmitLogDirect.cs

using System;using System.Linq;using RabbitMQ.Client;using System.Text; class EmitLogDirect {public static void Main(string[] args){var factory = new ConnectionFactory() { HostName = "localhost" };using(var connection = factory.CreateConnection())using(var channel = connection.CreateModel()){channel.ExchangeDeclare(exchange: "direct_logs", //聲明direct類型exchangetype: "direct");var severity = (args.Length > 0) ? args[0] : "info";var message = (args.Length > 1)? string.Join(" ", args.Skip( 1 ).ToArray()): "Hello World!";var body = Encoding.UTF8.GetBytes(message);channel.BasicPublish(exchange: "direct_logs", //發送routingkey 為severity的message routingKey: severity,basicProperties: null,body: body);Console.WriteLine(" [x] Sent '{0}':'{1}'", severity, message);}}Console.WriteLine(" Press [enter] to exit.");Console.ReadLine(); }

運行示例:

cd EmitLogDirect dotnet run error "Run. Run. Or it will explode."# => [x] Sent 'error':'Run. Run. Or it will explode.'

ReceiveLogsDirect.cs

using System;using RabbitMQ.Client;using RabbitMQ.Client.Events;using System.Text; class ReceiveLogsDirect {public static void Main(string[] args){var factory = new ConnectionFactory() { HostName = "localhost" };using(var connection = factory.CreateConnection())using(var channel = connection.CreateModel()){channel.ExchangeDeclare(exchange: "direct_logs", //聲明direct類型exchangetype: "direct");var queueName = channel.QueueDeclare().QueueName; //聲明帶隨機queue name的queueif(args.Length < 1){Console.Error.WriteLine("Usage: {0} [info] [warning] [error]",Environment.GetCommandLineArgs()[0]);Console.WriteLine(" Press [enter] to exit.");Console.ReadLine();Environment.ExitCode = 1;return;}foreach(var severity in args){channel.QueueBind(queue: queueName, //綁定queue和exchange和特定值的routingkeyexchange: "direct_logs",routingKey: severity);}Console.WriteLine(" [*] Waiting for messages.");var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{var body = ea.Body;var message = Encoding.UTF8.GetString(body);var routingKey = ea.RoutingKey; //接收的message的routing keyConsole.WriteLine(" [x] Received '{0}':'{1}'",routingKey, message);};channel.BasicConsume(queue: queueName,autoAck: true,consumer: consumer);Console.WriteLine(" Press [enter] to exit.");Console.ReadLine();}} }

使用示例:

cd ReceiveLogsDirect dotnet run warning error > logs_from_rabbit.log

示例2

cd ReceiveLogsDirect dotnet run info warning error# => [*] Waiting for logs. To exit press CTRL+C

?參考網址:

https://www.rabbitmq.com/tutorials/tutorial-four-dotnet.html

?

轉載于:https://www.cnblogs.com/Vincent-yuan/p/10941033.html

總結

以上是生活随笔為你收集整理的RabbitMQ学习之Routing(4)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。