1.安裝完成rabbitMQ
參考上一篇如何安裝 rabbitMQ
2.安裝 OTP服務
https://www.erlang.org/downloads
C#代碼
需要匯入RabbitMQ.Client
在NuGet中搜索自取

佇列發送端
var factory = new ConnectionFactory();//RabbitMQ服務器地址factory.HostName = "192.168.0.22";//埠號//factory.Port = 15672;factory.UserName = "admin";factory.Password = "123456";//訊息異步轉發factory.DispatchConsumersAsync = true;//交換機名稱string exchangeName = "exchange2";//routingKey的值string eventName = "key1";//連接服務器using var conn = factory.CreateConnection();int MsgInt = 1;
while (true){ //待發送的訊息 string msg = $"{MsgInt++}條訊息{DateTime.Now.ToLongTimeString()}"; //創建信道 using (var channel = conn.CreateModel()) { //訊息屬性 var properties = channel.CreateBasicProperties(); //傳輸模式,1:非持久化,2:持久化 properties.DeliveryMode = 2; //宣告交換機 channel.ExchangeDeclare(exchange: exchangeName, type: "direct"); byte[] body = Encoding.UTF8.GetBytes(msg); //生產訊息 channel.BasicPublish(exchange: exchangeName, routingKey: eventName, mandatory: true, basicProperties: properties, body: body); } Console.WriteLine("發送訊息:" + msg); Thread.Sleep(1000);}
收信方
var factory = new ConnectionFactory();//RabbitMQ服務器地址factory.HostName = "localhost";//埠號//factory.Port = 15672;factory.UserName = "admin";factory.Password = "123456";
//訊息異步轉發factory.DispatchConsumersAsync = true;//交換機名稱string exchangeName = "exchange2";//routingKey的值string eventName = "key1";using var conn = factory.CreateConnection();//創建信道using var channel = conn.CreateModel();
//宣告交換機channel.ExchangeDeclare(exchange: exchangeName, type: "direct");//宣告佇列string queueName = "queue1";channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);//將佇列系結到交換機中channel.QueueBind(queueName, exchangeName, eventName);//消費者拉取訊息AsyncEventingBasicConsumer consumer = new AsyncEventingBasicConsumer(channel);consumer.Received += Consumer_Received;//消費訊息channel.BasicConsume(queueName, autoAck: false, consumer);Console.WriteLine("按回車退出");Console.ReadLine();
async Task Consumer_Received(object sender, BasicDeliverEventArgs args){ try { byte[] bytes = args.Body.ToArray(); string msg = Encoding.UTF8.GetString(bytes);
Console.WriteLine(DateTime.Now.ToLongTimeString() + "收到了資訊" + msg); //訊息確認處理,DeliveryTag:訊息的編號 執行后等于告訴佇列 已經收到了訊息 channel.BasicAck(args.DeliveryTag, multiple: false); await Task.Delay(800); } catch (Exception ex) { //對沒有確認處理的訊息進行訊息重發 channel.BasicReject(args.DeliveryTag, true); Console.WriteLine(DateTime.Now.ToLongTimeString() + "處理收到的訊息出錯:" + ex); }}
收信方和發送方 分別是 2個專案 做 測驗
ConsoleApp1是發送 2是收信

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470516.html
標籤:C#
下一篇:C# 訊息佇列demo
