C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)
在本文中,我们将详细讲解如何使用C#语言和RabbitMQ队列来实现消息传递。我们将介绍RabbitMQ的几种常见模式,包括Sample、Work、Fanout和Direct模式,并提供两个示例说明。
环境准备
在开始本文之前,需要确保已经安装软件:
- .NET Core SDK 3.1或更高版本
- RabbitMQ服务器
示例一:使用Sample模式
在本示例中,我们将使用Sample模式来发送和接收消息。具体步骤如下:
- 添加RabbitMQ依赖。
- 创建一个RabbitMQ连接。
- 创建一个消息发送者。
- 创建一个消息接收者。
- 发送消息。
- 接收消息。
1. 添加RabbitMQ依赖
在Visual Studio中,使用NuGet包管理器添加RabbitMQ依赖。
2. 创建一个RabbitMQ连接
在C#代码中,创建一个RabbitMQ连接。
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
// TODO: Add code here
}
在上述代码中,我们创建了一个ConnectionFactory
对象,并设置了RabbitMQ服务器的主机名。然后,我们使用CreateConnection
方法创建了一个RabbitMQ连接。
3. 创建一个消息发送者
在C#代码中,创建一个消息发送者。
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "sample_queue",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "",
routingKey: "sample_queue",
basicProperties: null,
body: body);
Console.WriteLine("Sent message: {0}", message);
}
在上述代码中,我们使用CreateModel
方法创建了一个RabbitMQ通道,并使用QueueDeclare
方法声明了一个名为sample_queue
的队列。然后,我们使用BasicPublish
方法将消息发送到队列中。
4. 创建一个消息接收者
在C#代码中,创建一个消息接收者。
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "sample_queue",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("Received message: {0}", message);
};
channel.BasicConsume(queue: "sample_queue",
autoAck: true,
consumer: consumer);
Console.WriteLine("Press [enter] to exit.");
Console.ReadLine();
}
在上述代码中,我们使用CreateModel
方法创建了一个RabbitMQ通道,并使用QueueDeclare
方法声明了一个名为sample_queue
的队列。然后,我们创建了一个EventingBasicConsumer
对象,并实现了Received
事件处理程序,用于处理接收到的消息。最后,我们使用BasicConsume
方法开始接收消息。
5. 发送消息
在Visual Studio中,运行发送者代码。
6. 接收消息
在Visual Studio中,运行接收者代码。
示例二:使用Work模式
在本示例中,我们将使用Work模式来发送和接收消息。具体步骤如下:
- 添加RabbitMQ依赖。
- 创建一个RabbitMQ连接。
- 创建一个消息发送者。
- 创建多个消息接收者。
- 发送消息。
- 接收消息。
1. 添加RabbitMQ依赖
在Visual Studio中,使用NuGet包管理器添加RabbitMQ依赖。
2. 创建一个RabbitMQ连接
在C#代码中,创建一个RabbitMQ连接。
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
// TODO: Add code here
}
在上述代码中,我们创建了一个ConnectionFactory
对象,并设置了RabbitMQ服务器的主机名。然后,我们使用CreateConnection
方法创建了一个RabbitMQ连接。
3. 创建一个消息发送者
在C#代码中,创建一个消息发送者。
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "work_queue",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
channel.BasicPublish(exchange: "",
routingKey: "work_queue",
basicProperties: properties,
body: body);
Console.WriteLine("Sent message: {0}", message);
}
在上述代码中,我们使用CreateModel
方法创建了一个RabbitMQ通道,并使用QueueDeclare
方法声明了一个名为work_queue
的队列。然后,我们使用CreateBasicProperties
方法创建了一个持久化的消息属性,并使用BasicPublish
方法将消息发送到队列中。
4. 创建多个消息接收者
在C#代码中,创建多个消息接收者。
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "work_queue",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("Received message: {0}", message);
int dots = message.Split('.').Length - 1;
Thread.Sleep(dots * 1000);
Console.WriteLine("Done");
channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
};
channel.BasicConsume(queue: "work_queue",
autoAck: false,
consumer: consumer);
Console.WriteLine("Press [enter] to exit.");
Console.ReadLine();
}
在上述代码中,我们使用CreateModel
方法创建了一个RabbitMQ通道,并使用QueueDeclare
方法声明了一个名为work_queue
的队列。然后,我们使用BasicQos
方法设置了每个消费者一次只能处理一个消息。接着,我们创建了一个EventingBasicConsumer
对象,并实现了Received
事件处理程序,用于处理接收到的消息。最后,我们使用BasicConsume
方法开始接收消息。
5. 发送消息
在Visual Studio中,运行发送者代码。
6. 接收消息
在Visual Studio中,运行多个接收者代码。
总结
本文详细讲解了如何使用C#语言和RabbitMQ队列来实现消息传递。通过使用Sample、Work、Fanout和Direct模式,我们可以轻松地实现消息传递。在示例代码中,我们演示了如何使用RabbitMQ连接、消息发送者和消息接收者来发送和接收消息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用) - Python技术站