使用NuGet包管理器控制台安装RabbitMQ 库:RabbitMQ.Client
或
用程序包管理器控制台:Install-Package RabbitMQ.Client -Version 6.5.0
生产者:
using RabbitMQ.Client;
using System.Text;
ConnectionFactory factory = new()
{
HostName = "192.168.1.134",
Port = AmqpTcpEndpoint.UseDefaultPort, //5672,
UserName = "RabbitMQ用户名",
Password = "RabbitMQ密码",
DispatchConsumersAsync = true
};
//创建连接对象
var connection = factory.CreateConnection();
//创建一个管道
var channel = connection.CreateModel();
//创建一个交换机
string ExchangeName = "FirstExchange";
channel.ExchangeDeclare(ExchangeName, "direct");
//创建一个队列
string QueryName = "FirstQuery";
channel.QueueDeclare(QueryName, durable: true, exclusive: false, autoDelete: false, arguments: null);
//把队列绑定到交换机
string RoutingKey = "Info_FirstRoutingKey";
channel.QueueBind(QueryName, ExchangeName, RoutingKey);
var prop = channel.CreateBasicProperties();
prop.DeliveryMode = 2;
for (int i = 0; i < 100; i++)
{
string msg = $"我发送了一条消息:{i}";
byte[] bytes = Encoding.UTF8.GetBytes(msg);
channel.BasicPublish(ExchangeName, RoutingKey, mandatory: true, basicProperties: prop, bytes);
Console.WriteLine(msg);
Task.Delay(3000).Wait();
}
Console.ReadLine();
消费者:
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;
ConnectionFactory factory = new()
{
HostName = "192.168.1.134",
Port = 5672,
UserName = "RabbitMQ用户名",
Password = "RabbitMQ密码",
DispatchConsumersAsync = true
};
//创建连接对象
var connextion = factory.CreateConnection();
//创建一个管道
var channel = connextion.CreateModel();
//创建一个交换机
string ExchangeName = "FirstExchange";
channel.ExchangeDeclare(ExchangeName, "direct");
//创建一个队列
string QueryName = "FirstQuery";
channel.QueueDeclare(QueryName, durable: true, exclusive: false, autoDelete: false, arguments: null);
//把队列绑定到交换机
string RoutingKey = "Info_FirstRoutingKey";
channel.QueueBind(QueryName, ExchangeName, RoutingKey);
//创建一个事件对象
AsyncEventingBasicConsumer consumer = new(channel);
consumer.Received += Consumer_Received;
channel.BasicConsume(QueryName, false, consumer);
async Task Consumer_Received(object? sender, BasicDeliverEventArgs e)
{
try
{
//获取消息
var body = e.Body;
var msg = Encoding.UTF8.GetString(body.ToArray());
var routingKey = e.RoutingKey;//获取队列名
Console.WriteLine($"Message is {msg},RoutingKey:{routingKey}");
channel.BasicAck(e.DeliveryTag, false);
await Task.Delay(800);
}
catch (Exception ex)
{
Console.WriteLine("错误信息:" + ex.ToString());
channel.BasicReject(e.DeliveryTag, true);
}
}
Console.ReadLine();