.NET 8 Web 应用、Web API 和 RabbitMQ

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

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

介绍

  • 信用卡交易流程:

该 Web 项目使用 .NET 8 和 C# 开发,负责接收用户信用卡交易数据。这些数据经过验证后,会存储在数据库中用于交易记录。插入数据库后,Web 应用程序会向 RabbitMQ 发送一条消息,告知需要处理的新交易的 ID。

  • 支付处理 API:

该 API 负责从 RabbitMQ 接收包含待处理交易 ID 的消息。
收到消息后,API 会查询数据库,检索与该 ID 关联的交易详情。
获取交易详情后,API 会使用信用卡信息并与相应的支付系统进行交互,执行支付处理。

先决条件:

在开始之前,请确保您的机器上安装了以下软件

Visual Studio Community

.NET 8 SDK

Docker

让我们创建容器来支持堆栈。

使用 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"

]

}

}

}

现在,访问付款页面并创建新的付款:

http://localhost:5101/

Web 应用程序负责将交易数据持久化到数据库中,并通过向 RabbitMQ 发送消息来发出需要处理的新支付交易信号

之后,API 的后台服务会监听 RabbitMQ 上的消息并进行处理。此处理由 PaymentWorker.cs 类完成。

结论

使用 RabbitMQ 的优点:

与其直接在 Web 应用程序中处理付款,不如使用 RabbitMQ 之类的消息队列,这是一种更具可扩展性和稳定性的办法。

通过采用 RabbitMQ,Web 应用程序只需向队列发送一条消息来指示需要处理事务,而无需担心处理本身。

这将交易流程与 Web 应用分离,使其更轻量、更具可扩展性和敏捷性,因为它无需处理支付处理。如果信用卡被拒、支付网关离线、出现网络问题,或者遇到大量交易,您可以稍后处理,而不会影响 Web 应用和用户体验。

此外,使用消息队列可以为系统提供更高的可靠性和弹性,因为在处理失败的情况下消息可以重新排队,确保不会丢失任何交易。

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

相关推荐
Rick19933 小时前
rabbitmq, rocketmq, kafka这三种消息如何分别保住可靠性,顺序性,以及应用场景?
kafka·rabbitmq·rocketmq
csdn_aspnet1 天前
在 ASP.NET Core (WebAPI) 中启用 CORS
后端·asp.net·.netcore
开心码农1号2 天前
Java rabbitMQ如何发送、消费消息、全套可靠方案
java·rabbitmq·java-rabbitmq
leo_messi942 天前
RabbitMq(五) -- SpringBoot整合 RabbitMQ 完整实现
spring boot·rabbitmq·java-rabbitmq
观无2 天前
Windows 本地电脑搭建一个私有的、类似 Gitee 的 Git 服务
gitee·jenkins·.netcore
Arva .2 天前
RabbitMQ消费者处理失败
分布式·rabbitmq
开心码农1号3 天前
mq是什么,常用mq的使用场景有哪些?
中间件·rabbitmq
Bohemian—Rhapsody3 天前
麒麟v10-arm架构部署rabbitmq
arm开发·架构·rabbitmq
武藤一雄4 天前
C# 异常(Exception)处理避坑指南
windows·microsoft·c#·.net·.netcore·鲁棒性
總鑽風4 天前
数据一致性springcloud+rabbitmq+mysql+redis
mysql·spring cloud·rabbitmq