RabbitMQ是一个功能强大的消息队列中间件,它可以在应用程序之间提供可靠的异步通信。以下是使用C#和RabbitMQ进行基本操作的简单示例。
首先,您需要在项目中安装RabbitMQ.Client NuGet包。您可以通过搜索"RabbitMQ.Client"来找到并安装它。
以下是一个使用RabbitMQ的发布/订阅模式的示例:
1. 生产者(发布者)代码示例:
```csharp
using RabbitMQ.Client;
using System;
using System.Text;
class Program
{
static void Main()
{
// 创建连接工厂
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
// 声明一个交换机,类型为"fanout"广播
channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout);
while (true)
{
Console.WriteLine("请输入要发送的消息:");
var message = Console.ReadLine();
// 将消息转换为字节数组
var body = Encoding.UTF8.GetBytes(message);
// 发布消息到交换机,并指定routingKey为空
channel.BasicPublish(exchange: "logs",
routingKey: "",
basicProperties: null,
body: body);
Console.WriteLine("消息已发送:{0}", message);
}
}
}
}
```
2. 消费者(订阅者)代码示例:
```csharp
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
class Program
{
static void Main()
{
// 创建连接工厂
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
// 声明一个交换机,类型为"fanout"广播
channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout);
// 声明一个随机生成的临时队列
var queueName = channel.QueueDeclare().QueueName;
// 绑定队列到交换机
channel.QueueBind(queue: queueName,
exchange: "logs",
routingKey: "");
Console.WriteLine("等待消息...");
var consumer = new EventingBasicConsumer(channel);
// 接收消息的事件处理程序
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("收到消息:{0}", message);
};
// 启动消费者并开始消费队列中的消息
channel.BasicConsume(queue: queueName,
autoAck: true,
consumer: consumer);
Console.WriteLine("按任意键退出");
Console.ReadLine();
}
}
}
```
在以上示例中,生产者使用`channel.BasicPublish`方法将消息发布到名为"logs"的交换机上,而消费者使用`channel.BasicConsume`方法从队列中消费消息。
这只是RabbitMQ提供的许多功能之一。您还可以使用不同的交换机类型和路由键来实现更复杂的消息路由和处理逻辑。
希望这个简单的示例能够帮助您开始使用RabbitMQ进行消息通信!
如果喜欢我的文章,那么
“在看”和转发是对我最大的支持!
-
技术群:添加小编微信并备注进群
小编微信:mm1552923
公众号:dotNet编程大全