在本文中,我们将探讨使用 RabbitMQ 的优势,包括更高的可扩展性、可靠性和性能,同时保持应用程序不同组件之间职责的清晰分离。此外,该项目遵循清晰架构原则,并实施健康检查以确保服务的稳健性。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
介绍
- 信用卡交易流程:
该 Web 项目使用 .NET 8 和 C# 开发,负责接收用户信用卡交易数据。这些数据经过验证后,会存储在数据库中用于交易记录。插入数据库后,Web 应用程序会向 RabbitMQ 发送一条消息,告知需要处理的新交易的 ID。
- 支付处理 API:
该 API 负责从 RabbitMQ 接收包含待处理交易 ID 的消息。
收到消息后,API 会查询数据库,检索与该 ID 关联的交易详情。
获取交易详情后,API 会使用信用卡信息并与相应的支付系统进行交互,执行支付处理。
先决条件:
在开始之前,请确保您的机器上安装了以下软件
让我们创建容器来支持堆栈。
使用 RabbitMQ 创建一个新容器:
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:3-management
使用 SQL Server DB 创建一个新容器:
docker run -d --name meu-sql-server -p 1433:1433 -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=SuaSenhaSegura" -v /caminho/para/data:/var/opt/mssql mcr.microsoft.com/mssql/server:2019-latest
源码示例:https://download.csdn.net/download/hefeng_aspnet/92042492
cd .\article-web-api-rabbitmq\
使用包管理器控制台创建表:
update-database

之后,运行 Web 和 Api 两个项目。

此时您应该可以访问该项目并且他们应该有"健康"的回应:
网址:http://localhost:5101/health
API:http://localhost:5120/health
预期响应:
{
"status": "Healthy",
"totalDuration": "00:00:00.2439938",
"entries": {
"rabbitmq-check": {
"data": {},
"duration": "00:00:00.0169928",
"status": "Healthy",
"tags": [
"rabbitmq"
]
},
"sqlserver-check": {
"data": {},
"duration": "00:00:00.2411064",
"status": "Healthy",
"tags": [
"sqlserver"
]
}
}
}
现在,访问付款页面并创建新的付款:

Web 应用程序负责将交易数据持久化到数据库中,并通过向 RabbitMQ 发送消息来发出需要处理的新支付交易信号
之后,API 的后台服务会监听 RabbitMQ 上的消息并进行处理。此处理由 PaymentWorker.cs 类完成。



结论
使用 RabbitMQ 的优点:
与其直接在 Web 应用程序中处理付款,不如使用 RabbitMQ 之类的消息队列,这是一种更具可扩展性和稳定性的办法。
通过采用 RabbitMQ,Web 应用程序只需向队列发送一条消息来指示需要处理事务,而无需担心处理本身。
这将交易流程与 Web 应用分离,使其更轻量、更具可扩展性和敏捷性,因为它无需处理支付处理。如果信用卡被拒、支付网关离线、出现网络问题,或者遇到大量交易,您可以稍后处理,而不会影响 Web 应用和用户体验。
此外,使用消息队列可以为系统提供更高的可靠性和弹性,因为在处理失败的情况下消息可以重新排队,确保不会丢失任何交易。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。