.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 应用和用户体验。

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

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

相关推荐
csdn_aspnet2 小时前
在 .NET Core 8 中实现 RabbitMQ
rabbitmq·.net8
AC赳赳老秦3 小时前
DeepSeek + Excel 实战:多表联动分析与异常数据自动预警教程
microsoft·rabbitmq·excel·etcd·memcached·memcache·deepseek
@淡 定3 小时前
主流消息队列对比:Kafka vs RabbitMQ vs RocketMQ
kafka·rabbitmq·rocketmq
AC赳赳老秦5 小时前
动态可视化报告制作:DeepSeek+Mermaid生成交互式流程图/甘特图
信息可视化·rabbitmq·流程图·甘特图·memcached·memcache·deepseek
Mr.朱鹏21 小时前
超时订单处理方案实战指南【完整版】
java·spring boot·redis·spring·rabbitmq·rocketmq·订单
Wang's Blog1 天前
RabbitMQ: 集群监控与高可用架构深度解析之状态检测、问题诊断
架构·rabbitmq
温暖的苹果1 天前
【.Net runtime】corehost(.NET 应用启动过程)
c#·.net·.netcore
csdn_aspnet1 天前
使用 Windows 客户端的 RabbitMQ Messaging for .NET 8 Web API 第 2 部分
windows·rabbitmq·.netcore·.net8
csdn_aspnet1 天前
使用 Windows 客户端的 RabbitMQ Messaging for .NET 8 Web API 第 1 部分
rabbitmq·.net·.netcore·.net8