首页 > 编程语言 >ASP.NET Core 中使用基本消息的 RabbitMQ 消费者

ASP.NET Core 中使用基本消息的 RabbitMQ 消费者

时间:2024-06-08 12:00:21浏览次数:29  
标签:Core ASP 队列 RabbitMQ 处理程序 消息 NET

介绍

RabbitMQ 是一种流行的消息代理,它使应用程序能够通过交换消息进行异步通信。本文中,我们将探讨如何使用基本消息处理程序在 ASP.NET Core 应用程序中实现 RabbitMQ 消费者。我们将利用 ASP.NET Core 中间件的灵活性来创建一个可重复使用的消息处理管道,该管道可以高效地处理来自 RabbitMQ 队列的消息。

先决条件

  • 对 ASP.NET Core 和 RabbitMQ 有基本的了解。
  • RabbitMQ 服务器已安装并正在运行。
  • 已安装 Visual Studio 或 Visual Studio Code。

步骤 1. 设置 RabbitMQ

在深入研究代码之前,请确保您的计算机或 ASP.NET Core 应用程序可访问的服务器上已安装并运行 RabbitMQ。您可以从官方网站下载 RabbitMQ 并按照提供的安装说明进行操作。

步骤 2.创建 ASP.NET 核心应用程序

使用 Visual Studio 或 dotnet new 命令创建一个新的 ASP.NET Core 应用程序。确保包含 RabbitMQ 客户端集成所需的依赖项。

dotnet new webapi -n RabbitMQConsumerDemo

步骤 3.安装 RabbitMQ 客户端库

安装 RabbitMQ.Client NuGet 包,它提供了从 .NET 应用程序与 RabbitMQ 交互所需的 API。

dotnet add package RabbitMQ.Client

步骤 4. 实现基本消息处理程序

创建一个基础消息处理程序类,作为处理 RabbitMQ 消息的基础。此处理程序将定义所有消息处理程序都将继承的消息处理逻辑。

using RabbitMQ.Client.Events;
public abstract class BaseMessageHandler
{
    public abstract void HandleMessage(BasicDeliverEventArgs args);
}

步骤 5. 实现 RabbitMQ 消费者

创建一个 RabbitMQ 消费者类,它将使用来自 RabbitMQ 队列的消息,并将消息处理委托给适当的消息处理程序。

using RabbitMQ.Client; // 引入 RabbitMQ.Client 命名空间
using RabbitMQ.Client.Events; // 引入 RabbitMQ.Client.Events 命名空间

public class RabbitMQConsumer // 定义 RabbitMQConsumer 类
{
    private readonly IModel _channel; // 定义一个只读的 IModel 字段

    public RabbitMQConsumer() // 构造函数
    {
        var factory = new ConnectionFactory() { HostName = "localhost" }; // 创建一个 ConnectionFactory 实例并设置主机名为 "localhost"
        var connection = factory.CreateConnection(); // 使用工厂创建一个连接
        _channel = connection.CreateModel(); // 使用连接创建一个通道
    }

    public void Consume(string queueName, BaseMessageHandler messageHandler) // 定义 Consume 方法,接收队列名和消息处理器
    {
        _channel.QueueDeclare(queue: queueName, // 声明队列
                              durable: false, // 设置队列是否持久化
                              exclusive: false, // 设置队列是否排他
                              autoDelete: false, // 设置队列是否自动删除
                              arguments: null); // 额外的队列参数

        var consumer = new EventingBasicConsumer(_channel); // 创建一个事件驱动的消费者
        consumer.Received += (sender, args) => // 订阅消费者的接收消息事件
        {
            messageHandler.HandleMessage(args); // 当接收到消息时,调用消息处理器的 HandleMessage 方法处理消息
        };

        _channel.BasicConsume(queue: queueName, // 开始消费队列中的消息
                              autoAck: true, // 设置自动确认
                              consumer: consumer); // 设置消费者
    }
}

步骤 6. 创建消息处理程序

创建消息处理程序:通过从基本消息处理程序类继承并使用自定义消息处理逻辑重写 HandleMessage 方法来实现特定的消息处理程序。

public class OrderMessageHandler : BaseMessageHandler // 定义 OrderMessageHandler 类,继承自 BaseMessageHandler
{
    public override void HandleMessage(BasicDeliverEventArgs args) // 重写 HandleMessage 方法
    {
        var message = Encoding.UTF8.GetString(args.Body.ToArray()); // 将接收到的消息转换为字符串
        // 处理订单消息的逻辑
    }
}

步骤 7. 在 ASP.NET Core 应用程序中使用消息

在 Startup.cs 文件中,配置 RabbitMQ 使用者以使用所需队列中的消息,并将消息处理委托给适当的消息处理程序。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) // 定义 Configure 方法,配置应用程序的请求管道
{
    // 其他中间件配置...
    var consumer = new RabbitMQConsumer(); // 创建一个 RabbitMQConsumer 实例
    var orderMessageHandler = new OrderMessageHandler(); // 创建一个 OrderMessageHandler 实例
    consumer.Consume("orderQueue", orderMessageHandler); // 调用 Consume 方法,开始消费名为 "orderQueue" 的队列中的消息,并使用 orderMessageHandler 处理这些消息
}

结论

在文中本,我们演示了如何使用基本消息处理程序在 ASP.NET Core 应用程序中实现 RabbitMQ 使用者。通过遵循这种方法,您可以构建一个灵活且可扩展的消息处理管道,将消息处理逻辑与应用程序的其余部分分离。

标签:Core,ASP,队列,RabbitMQ,处理程序,消息,NET
From: https://blog.csdn.net/xiefeng240601/article/details/139544690

相关文章

  • 使用 iTextSharp 在 .NET Core 中进行 PDF 管理之合并 PDF
    介绍在当今的数字时代,以编程方式管理PDF文档是许多应用程序的常见要求。无论是生成报告和发票还是合并多个PDF文件,拥有合适的工具都可以显著简化开发流程。在本文中,我们将探讨如何利用iTextSharp(一种用于处理C#中PDF的流行库)在.NETCore应用程序中无缝合并PDF......
  • Asp .Net Core 系列:详解鉴权(身份验证)以及实现 Cookie、JWT、自定义三种鉴权 (含源码解
    什么是鉴权(身份验证)?https://learn.microsoft.com/zh-cn/aspnet/core/security/authentication/?view=aspnetcore-8.0定义鉴权,又称身份验证,是确定用户身份的过程。它验证用户提供的凭据(如用户名和密码)是否有效,并据此确认用户是否具备访问系统的权利。过程用户向系统提供......
  • 跟着杨中科学习(四)EFCore(二)
    主键自增主键自动增长。优点:简单;缺点:数据库迁移以及分布式系统中比较麻烦;并发性能差。long、int等类型主键,默认是自增。因为是数据库生成的值,所以SaveChanges后会自动把主键的值更新到Id属性。试验一下。场景:插入帖子后,自动重定向帖子地址。自增字段的代码中不能......
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
    .netcore使用js,.netcore使用javascript,在.netcore项目中怎么使用javascript我项目里需要用到“文字编码”,为了保证前端和后端的编码解码不处bug,所以,我在项目中用了这个下面推荐之前在.netF4.0时的方法文章一:c#解码js的escape_c#escape-CSDN博客文章二:c#对js......
  • CorelDRAW 全称“CorelDRAW Graphics Suite
    箭头在各种场景中被广泛使用。在设计中,设计师可以根据设计的目的和受众,巧妙地运用箭头来传达信息、创造视觉效果或引导观者的注意力。在CDR软件中可以为设计添加箭头,那具体该怎么做呢?下面由我带大家一起来了解CoreIDRAW箭头形状工具在哪里,CoreIDRAW箭头形状怎么改成曲线的相关......
  • ASP.NET Core MVC 练习项目
    目录一、开发环境二、项目搭建2.1创建ASP.NETMVC项目2.2导入相关程序包2.3创建模型类、数据库上下文2.4配置连接数据库、配置数据库上下文、注册数据库上下文2.5数据迁移、添加初始数据三、业务实现3.1新建接口类文件夹IService,并在文件夹中创建IGetService接......
  • ASP.NET Core MVC 接上篇新增加“增删改查”操作
    前言由于上一篇文章只写了怎么创建项目以及一个查询操作,这篇文章将把增删改查的操作补齐,希望能帮助到一同学习的小伙伴,内容中如有不懂的点,可参考ASP.NETCore官方文档,如有写的不对的,请在评论区补充,主打听劝;增删改查接口类publicinterfaceIGetService<T>whereT:cl......
  • EFCore和EF6的使用和区别
    1、Sqlserver是微软的亲儿子,很少会报错,EF报错问题最多出现在Mysql。以下使用mysql为例子C#一般很形象,带Core的都是.NetCore平台的。所以在.NetFramework平台我们使用EF6,也就是EntityFramework6在.NetCore平台使用EFCore2、直接上代码(.Net6)internalclassProgram{......
  • rabbitMq实现系统内的短信发送设计&动态获取BEAN
    rabbitMq实现系统内的短信发送设计&动态获取BEAN1.短信非系统的重要节点操作,可以在任务完成之后,比如下单成功,发送下单成功的mq消息,短信服务接收到mq消息,动态的判断该短信的code,通过全局公共的父类(调用中台等接口获取全部所有需要的对象参数),获取短信中的{mobile}等参数来替换短......
  • Entity Framwork Core (一)
    ORM:ObjectRelationalMapping。让开发者用对象操作的形式操作关系数据库。从面向数据库集中到面向对象。NugetMicrosoft.EntityFrameworkCore//针对于sqlserverMicrosoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Design//在vs中需要装Microsoft.......