C#生产者消费者调用消息队列RabbitMQ实例

在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 方法来确认消息已经被正确处理。
  • 如果你的应用程序需要处理多个消息,你可能需要实现并发处理逻辑。这可以通过使用多个消费者线程或异步处理来实现。
  • 在生产环境中,你可能还需要考虑消息持久性、消息确认、错误处理、连接恢复等问题。
相关推荐
崇文殿大学士35 分钟前
C# MediatR 中介者模式 观察者模式
观察者模式·c#·中介者模式
derive_magic1 小时前
wwwwwwjava
开发语言·c#
代数狂人1 小时前
【秒懂C#14 第一章:C#简介】
开发语言·c#
web3.08889991 小时前
淘宝客API调用折扣商品搜索及商品详情示例代码
开发语言·c#
张人玉2 小时前
C#编写西门子S7PLC通信的相关知识点
microsoft·c#·wpf·plc·西门子s7通信
Byron Loong2 小时前
【C#】离线场景检测系统时间回拨
开发语言·c#
CodeCraft Studio2 小时前
Excel处理控件Aspose.Cells教程:使用C#在Excel中创建漏斗图
ui·c#·excel·aspose·excel开发·excel漏斗图·漏斗图
m5655bj2 小时前
Python 将 Word 文档转换为 Markdown 格式
python·c#·word
yue0083 小时前
C# 获取电脑硬件和系统信息
c#
未来之窗软件服务3 小时前
操作系统应用(三十七)C#华旭金卡身份证SDK-HX-FDX3S—东方仙盟筑基期
开发语言·c#·身份证阅读器·酒店管理系统·仙盟创梦ide