当前位置: 首页 > news >正文

.NETCore、.NET 7 和 RabbitMQ 的发布-订阅模式

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

本文将探索如何使用 .NET 7 和 RabbitMQ 作为应用程序可靠的消息代理来实现这个绝佳的模式。

如果您不熟悉 RabbitMQ 及其基本概念,我强烈建议您阅读我之前的文章:

https://blog.csdn.net/hefeng_aspnet/article/details/152210945

不过,在我们开始讲解代码之前,让我先简单介绍一下发布-订阅模式的含义。想象一下:系统中有多个对象想要接收特定事件或更新的通知。使用发布-订阅模式,这些对象可以订阅感兴趣的主题,并只接收它们关心的通知。这样一来,再也不用被无用的更新淹没了!此外,这种模式还能降低依赖性,并促进系统组件之间的松耦合。这难道不棒极了?

环境配置

好了,我们先来设置一下环境。确保你的机器上已经安装了 Docker。如果你还没有,不用担心!只需按照docker.com上的安装说明操作即可。

要创建本地 RabbitMQ 实例及其漂亮的管理界面,请运行以下命令:

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10-management

现在,我们如何访问管理界面?很简单!打开你常用的浏览器,访问http://localhost:15672/。RabbitMQ UI 登录界面会显示欢迎界面。用户名和密码都使用“guest”。好了!登录成功!

在深入实现之前,我们先配置一些东西。在 RabbitMQ UI 中,转到“Exchanges”选项卡并执行以下步骤:

1 — 展开“Add a new exchange”部分。

2 — 填写以下详细信息:

  • 姓名:customers-service
  • 类型:topic

3 — 点击“Add exchange”。

现在,让我们创建两个队列和绑定。仍然在 RabbitMQ UI 中,导航到“队列”选项卡并执行以下操作:

4 — 展开“Add a new queue”部分。

5 — 填写以下详细信息:

  • 姓名:notifications-service/customer-created
  • 类型:Classic

6 — 点击“Add queue”。

7 — 使用以下详细信息重复此过程:

  • 姓名:sales-service/customer-created
  • 类型:Classic

8 — 现在,让我们将这些队列绑定到我们的交换机。访问队列的“Bindings”选项卡notifications-service/customer-created,并填写以下详细信息:

  • From exchange:customers-service
  • Routing key:customer-created

9--sales-service/customer-created创建具有相同详细信息的队列重复相同的步骤。

现在我们的环境已经设置好了,是时候开始编写一些代码了!

执行

在本文开头,我提到过源代码可供您查看。您可以在这里找到它。

我们有一个包含三个 ASP.NET Core 7 项目的解决方案:

  1. PowerShop.Customers:我们引以为豪的出版商CustomerCreatedEvent
  2. PowerShop.Notifications 和 PowerShop.Sales:我们热切的订阅者CustomerCreatedEvent

让我们看一下这些项目中的一些重要类。

首先,让我们深入研究发布者的代码,它位于项目CustomersController的中PowerShop.Customers。该控制器公开一个 HTTP POST 端点,该端点与 RabbitMQ 建立连接,并customers-service使用customer-created路由键向交换器发布消息。

以下是代码中发生的事情的细分:

  1. 我们实例化一个ConnectionFactory对象,并将其指向“localhost”处的本地 RabbitMQ 实例。
  2. 我们创建一个连接并使用该连接创建一个通道。
  3. 我们将对象转换为 JSON 字符串,然后转换为字节数组,以将其作为消息发布。
  4. 我们通过提供交换、路由键和代表消息的字节数组来发布消息。

现在,让我们继续讨论订阅者。我们将使用继承自它们的类BackgroundService,并在文件中将它们配置为托管服务,Program.cs以确保它们在应用程序启动时启动。

让我们NotifyCustomerCreatedSubscriber从项目开始PowerShop.Notifications

上面的代码执行以下操作:

  1. 我们实例化一个ConnectionFactory,并将其指向“localhost”处的本地 RabbitMQ 实例。
  2. 我们创建一个连接并使用该连接创建一个通道。
  3. 我们实例化一个EventingBasicConsumer并为该事件设置一个事件处理程序Received
  4. 我们将消息主体的字节数组转换为CustomerCreatedEvent对象。
  5. 我们打印出收到的消息及其电子邮件内容。
  6. 我们确认该消息已使用该方法处理BasicAck
  7. BasicConsume最后,我们通过调用定义了队列和消费者的方法来开始使用消息。

现在,我们来看一下项目OnboardingCustomerCreatedSubscriber中的PowerShop.Sales。它遵循与之前的订阅者相同的模式。

呼!代码量好大,不过别担心,我们快完成了!

在运行应用程序并见证奇迹之前,我们需要在PowerShop.NotificationsPowerShop.Sales项目中配置订阅者。这很简单!只需Program.cs在 中的文件中添加以下行PowerShop.Notifications

并将此行添加到Program.cs文件中PowerShop.Sales

瞧!一切就绪!

现在,让我们分别运行三个应用程序。

api/customers向项目端点发出请求PowerShop.Customers。密切关注交易所的汇率变化customers-service,并准备好迎接“发布-订阅”模式的魔力!

呼!我们成功了!花点时间欣赏一下发布-订阅模式的美妙之处,以及它如何让我们的组件在彼此不认识的情况下进行通信。它就像一个秘密俱乐部,信息自由流动,订阅者只会收到他们感兴趣的内容。很棒,不是吗?

欢迎随意探索源代码并进行修改。一切皆有可能!祝您编程愉快!

请记住,在发布-订阅领域,兔子永远不会停止跳跃!😊

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

http://www.dtcms.com/a/557474.html

相关文章:

  • Crashpad 在windows下编译和使用指南
  • 基于SpringBoot+Vue的农产品销售系统【协同过滤推荐算法+可视化统计】
  • 基于flet的一款windows桌面应用,实现了浏览图片、音乐、小说、各种资源的功能
  • 【开题答辩过程】以《基于微信小程序的线上讲座管理系统》为例,不会开题答辩的可以进来看看
  • 怎么做好网站建设新手怎么开传媒公司
  • 2025年8月AGI月评|AI开源项目全解析:从智能体到3D世界,技术边界再突破
  • CSP-J/S 2025 游记
  • 深入洞察:业务流程从概念到实践
  • realloc用法
  • 智慧团建网站登录电脑版装饰工程有限公司的经营范围
  • STM32学习(MCU控制)(SPI and Flash 存储)
  • 网站推广有哪些方案pr免费模板网站
  • 轻量级HTTPSocks代理GOST: Linux编译安装
  • 有没有教做健身餐的网站wordpress菜单跳转
  • 以小白视角尝试 WPF / WinUI3 / MAUI / MAUI Blazor 构建 Windows 桌面程序
  • 网络原理-进阶
  • 百度搜索什么关键词能搜到网站大学生创新创业网站建设内容
  • c++muduo库--HttpRequest类
  • 分析网站的关键词唐山做网站公司哪家好
  • 基于MATLAB的雷达信号传播路径损耗仿真
  • cfu相关镜像
  • 关于网站建设的一些事韩雪冬网站设计
  • 如果做网站有做教育行业的招聘网站吗
  • 56.合并区间
  • 卡尔曼滤波算法原理详解:核心公式、C 语言代码实现及电机控制 / 目标追踪应用
  • 互联网创业项目整合网站创建一个公司需要什么
  • 便宜的网站设计企业重庆医院门户网站建设
  • 做网站要会那些ps公司核名查询官网
  • YAML 配置文件格式
  • Linux网络--网络基础概念