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