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

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

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

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

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

相关推荐
2501_941403765 小时前
5G时代的智能物联网:连接万物、赋能未来
rabbitmq
2501_941802487 小时前
人工智能与可持续发展:科技赋能绿色未来
rabbitmq
2501_9418227515 小时前
5G技术:引领智能时代的革命性变革
rabbitmq
2501_9411495016 小时前
物联网在智能城市建设中的应用:打破边界,连接未来
rabbitmq
2501_9411495016 小时前
5G技术赋能智能城市:连接未来的数字化基础设施
rabbitmq
zl97989918 小时前
RabbitMQ-延迟队列
分布式·rabbitmq
源码梦想家19 小时前
云计算与边缘计算:未来数字化转型的关键驱动力
rabbitmq
2501_941148151 天前
区块链技术与未来金融:去中心化的革命
rabbitmq
s***4531 天前
【RabbitMQ】超详细Windows系统下RabbitMQ的安装配置
windows·分布式·rabbitmq