在C#中,你可以使用RabbitMQ的客户端库来与RabbitMQ消息队列进行交互。以下是一个简单的C#示例,展示了如何使用RabbitMQ实现生产者和消费者。
首先,你需要确保已经安装了RabbitMQ服务器,并且已经在你的项目中安装了RabbitMQ的C#客户端库(例如,使用NuGet包管理器安装RabbitMQ.Client
)。
生产者(Publisher)
生产者将消息发送到RabbitMQ队列。
csharp复制代码
|---|-----------------------------------------------------------------------------------------|
| | using RabbitMQ.Client;
|
| | using RabbitMQ.Client.Events;
|
| | using System;
|
| | using System.Text;
|
| | |
| | class Program
|
| | {
|
| | static void Main(string[] args)
|
| | {
|
| | var factory = new ConnectionFactory() { HostName = "localhost" }; // 假设RabbitMQ在本地运行
|
| | using (var connection = factory.CreateConnection())
|
| | using (var channel = connection.CreateModel())
|
| | {
|
| | channel.QueueDeclare(queue: "hello",
|
| | durable: false,
|
| | exclusive: false,
|
| | autoDelete: false,
|
| | arguments: null);
|
| | |
| | string message = "Hello World!";
|
| | var body = Encoding.UTF8.GetBytes(message);
|
| | |
| | channel.BasicPublish(exchange: "",
|
| | routingKey: "hello",
|
| | basicProperties: null,
|
| | body: body);
|
| | Console.WriteLine(" [x] Sent {0}", message);
|
| | }
|
| | |
| | Console.WriteLine(" Press [enter] to exit.");
|
| | Console.ReadLine();
|
| | }
|
| | }
|
消费者(Consumer)
消费者从RabbitMQ队列中接收消息。
csharp复制代码
|---|-----------------------------------------------------------------------------------------|
| | using RabbitMQ.Client;
|
| | using RabbitMQ.Client.Events;
|
| | using System;
|
| | using System.Text;
|
| | |
| | class Program
|
| | {
|
| | static void Main(string[] args)
|
| | {
|
| | var factory = new ConnectionFactory() { HostName = "localhost" }; // 假设RabbitMQ在本地运行
|
| | using (var connection = factory.CreateConnection())
|
| | using (var channel = connection.CreateModel())
|
| | {
|
| | channel.QueueDeclare(queue: "hello",
|
| | 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(" [x] Received {0}", message);
|
| | };
|
| | channel.BasicConsume(queue: "hello",
|
| | autoAck: true,
|
| | consumer: consumer);
|
| | |
| | Console.WriteLine(" Press [enter] to exit.");
|
| | Console.ReadLine();
|
| | }
|
| | }
|
| | }
|
注意事项
HostName
应设置为你的RabbitMQ服务器地址。如果RabbitMQ在本地运行,则可以使用"localhost"
。- 队列名称(在这个例子中为
"hello"
)需要在生产者和消费者中保持一致。 autoAck
参数在消费者中设置为true
,意味着消息在消费者收到后会自动被确认。如果设置为false
,你需要手动调用BasicAck
方法来确认消息已经被正确处理。- 如果你的应用程序需要处理多个消息,你可能需要实现并发处理逻辑。这可以通过使用多个消费者线程或异步处理来实现。
- 在生产环境中,你可能还需要考虑消息持久性、消息确认、错误处理、连接恢复等问题。