详情

首页手游攻略 .NET Core实现方式RabbitMQ消息队列的示例代码实用指南

.NET Core实现方式RabbitMQ消息队列的示例代码实用指南

佚名 2026-09-08 08:00:02

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“.NET Core实现方法RabbitMQ消息队列的示例代码”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • 1. 安装和设置 RabbitMQ
    • 采用 Docker 安装 RabbitMQ
  • 2. 安装 RabbitMQ 客户端库
    • 3. 新建生产者(Producer)
      • 新建消息生产者代码
      • 参数说明:
    • 4. 新建消费者(Consumer)
      • 新建消息消费者代码
      • 参数说明:
    • 5. 持久化消息
      • 消息持久化设置
    • 6. 消息确认机制
      • 启用手动消息确认
    • 7. 运行和测试
      • 8. 总结

        从实现思路看,RabbitMQ 是一个流行的消息队列中间件,它允许应用程序借助异步消息的方式进行通信。RabbitMQ 兼容 AMQP 协议,能够借助多种方式与应用程序交互。在本教程中,我们将深入探讨如何在 .NET Core 环境中采用 RabbitMQ 来实现消息队列。我们将学习如何在生产者端发送消息,消费者端接收消息,同时确保消息的可靠性。

        1. 安装和设置 RabbitMQ

        实际处理时,在开始采用 RabbitMQ 之前,首先需确保你的机器上已经安装并运行 RabbitMQ。能够借助以下方式安装 RabbitMQ:

        采用 Docker 安装 RabbitMQ

        从实现思路看,RabbitMQ 提供了官方的 Docker 镜像,这使得在本地机器上运行 RabbitMQ 很轻松。

        docker pull rabbitmq:management
        docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management

        • 5672 是 RabbitMQ 的默认消息队列端口。
        • 15672 是 RabbitMQ 管理插件的 Web 界面端口。借助浏览器访问 (链接已移除) 能够登录 RabbitMQ 管理界面,默认的用户名和密码都是 guest

        安装并启动 RabbitMQ 后,您能够继续进行开发。

        2. 安装 RabbitMQ 客户端库

        落到代码里,在 .NET Core 中与 RabbitMQ 进行交互,我们需采用 RabbitMQ.Client NuGet 包。能够借助以下命令在项目里添加这个依赖:

        dotnet add package RabbitMQ.Client

        这个库提供了与 RabbitMQ 服务进行交互所需的所有工具。

        3. 新建生产者(Producer)

        理解这一步时,生产者是负责将消息发送到 RabbitMQ 的应用程序。它借助连接到 RabbitMQ 服务器、新建一个队列和交换机,将消息发布到队列中。

        新建消息生产者代码

        落到代码里,下面是一个基本的生产者示例,展示了如何连接到 RabbitMQ,声明队列,并发送一条轻松的消息:

        using RabbitMQ.Client;
        using System;
        using System.Text;

        class Program
        {
            static void Main(string[] args)
            {
                // 创建连接工厂
                var factory = new ConnectionFactory() { HostName = "localhost" };
                
                // 创建连接和通道
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    // 声明一个队列(确保队列存在)
                    channel.QueueDeclare(queue: "hello_queue", durable: false, exclusive: false, autoDelete: false, arguments: null);

                    // 创建消息
                    string message = "Hello, RabbitMQ!";
                    var body = Encoding.UTF8.GetBytes(message);

                    // 发送消息到队列
                    channel.BasicPublish(exchange: "", routingKey: "hello_queue", basicProperties: null, body: body);
                    Console.WriteLine(" [x] Sent {0}", message);
                }

                Console.WriteLine(" Press [enter] to exit.");
                Console.ReadLine();
            }
        }

        在上面的代码中:

        • ConnectionFactory 用来新建连接到 RabbitMQ 服务器的连接。
        • QueueDeclare 用来声明一个队列,确保队列存在。如果队列已经存在,声明将被忽略。
        • BasicPublish 用来将消息发送到队列。

        参数说明:

        • queue: 队列的名称(此例中是 hello_queue)。
        • durable: 是否将队列标记为持久化。如果设置为 true,即使 RabbitMQ 重启,队列也会存在。
        • exclusive: 是否使队列只对当前连接可用。
        • autoDelete: 是否在最后一个消费者断开连接时自动删除队列。

        4. 新建消费者(Consumer)

        从实现思路看,消费者从队列中拿到同时处理消息。消费者通常是另一个应用程序,它会连接到 RabbitMQ,并持续地从队列中取出消息进行处理。

        新建消息消费者代码

        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" };

                // 创建连接和通道
                using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    // 声明队列,确保消费者能够连接到相同的队列
                    channel.QueueDeclare(queue: "hello_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(" [x] Received {0}", message);
                    };

                    // 开始消费消息
                    channel.BasicConsume(queue: "hello_queue", autoAck: true, consumer: consumer);

                    Console.WriteLine(" Press [enter] to exit.");
                    Console.ReadLine();
                }
            }
        }

        在上面的代码中:

        • QueueDeclare 用来确保消费者连接到相同的队列。
        • EventingBasicConsumer 是消费者的实现,用来异步接收消息。
        • BasicConsume 用来开始消费消息,autoAck 设置为 true,表示自动确认消息。

        参数说明:

        • autoAck: 如果设置为 true,消费者会自动确认消息。如果设置为 false,需手动确认消息。

        5. 持久化消息

        实际处理时,若您希望在 RabbitMQ 重启后保持消息的持久性,能够在生产者和消费者中启用消息的持久化。

        消息持久化设置

        在生产者端发送持久化消息:

        // 设置消息持久化
        var properties = channel.CreateBasicProperties();
        properties.Persistent = true; // 设置消息为持久化

        channel.BasicPublish(exchange: "", routingKey: "hello_queue", basicProperties: properties, body: body);

        此外,声明队列时也需设置 durable: true,确保队列本身是持久化的。

        channel.QueueDeclare(queue: "hello_queue", durable: true, exclusive: false, autoDelete: false, arguments: null);

        6. 消息确认机制

        理解这一步时,在消息传递过程里,为了确保消息被成功消费同时避免丢失,能够启用消息确认机制。在这种情况下,消费者需显式确认消息。

        启用手动消息确认

        在消费者端禁用自动确认,同时手动确认每条已成功处理的消息:

        channel.BasicConsume(queue: "hello_queue", autoAck: false, consumer: consumer);

        consumer.Received += (model, ea) =>
        {
            var body = ea.Body.ToArray();
            var message = Encoding.UTF8.GetString(body);
            Console.WriteLine(" [x] Received {0}", message);
            
            // 手动确认消息
            channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
        };

        BasicAck 用来确认消息已经被处理。deliveryTag 是消息的标识符,multiple 参数表示是否确认多个消息。

        7. 运行和测试

        • 启动消费者应用程序,确保它能够连接到 RabbitMQ 同时等待消息。
        • 启动生产者应用程序,它将发送消息到 RabbitMQ 队列。
        • 消费者将从队列中接收到消息,并进行处理。

        理解这一步时,若一切设置正确,您将在控制台中看到生产者发送的消息以及消费者处理的消息。

        8. 总结

        结合项目来看,借助本教程,我们学习了如何在 .NET Core 中采用 RabbitMQ 实现一个轻松的消息队列系统。关键步骤包括:

        • 安装 RabbitMQ 客户端库。
        • 在生产者中声明队列并发送消息。
        • 在消费者中声明队列并处理消息。
        • 设置消息持久化和确认机制,确保消息的可靠性。

        落到代码里,RabbitMQ 是一个强大的消息队列中间件,适用来各种需解耦和异步通信的应用程序。借助灵活的交换机和队列设置,您能够完成不同的消息传递模式,以满足不同的业务需求。

        到此这篇关于.NET Core实现RabbitMQ消息队列的示例的文章就介绍到这了,更多相关.NET Core RabbitMQ消息队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!

        您可能感兴趣的文章:

        • 如何在一个.NET Core项目中采用RabbitMQ进行即时消息管理
        • .NET Core中RabbitMQ采用死信队列的实现
        • .Net Core和RabbitMQ限制循环消费的方法
        • .NETCore基于RabbitMQ实现延时队列的两方法
        • 运用.net core中实例讲解RabbitMQ高可用集群构建
        • 运用.NetCore实例讲解RabbitMQ死信队列,延时队列
        • 运用.net core中实例讲解RabbitMQ

        相关资讯
        点击查看更多
        游戏推荐
        推荐专题
        热门阅读
        推荐下载