.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,并准备好迎接"发布-订阅"模式的魔力!

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

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

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

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

相关推荐
J_liaty15 小时前
RabbitMQ面试题终极指南
开发语言·后端·面试·rabbitmq
maozexijr18 小时前
RabbitMQ Exchange Headers类型存在的意义?
分布式·rabbitmq
独自破碎E19 小时前
RabbitMQ的消息确认机制是怎么工作的?
分布式·rabbitmq
罗马苏丹默罕默德19 小时前
Ubuntu下部署.NetCore WebApi的方法
数据库·ubuntu·.netcore
maozexijr21 小时前
注解实现rabbitmq消费者和生产者
分布式·rabbitmq
Java 码农2 天前
RabbitMQ集群部署方案及配置指南09
分布式·rabbitmq
论迹2 天前
RabbitMQ
分布式·rabbitmq
Java 码农2 天前
RabbitMQ集群部署方案及配置指南08--电商业务延迟队列定制化方案
大数据·分布式·rabbitmq
Java 码农2 天前
Spring Boot集成RabbitMQ的各种队列使用案例
spring boot·rabbitmq·java-rabbitmq
vb2008112 天前
Ubuntu 系统下 RabbitMQ 作为 MQTT 代理的配置方案
mqtt·rabbitmq