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

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

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

相关推荐
宝桥南山17 小时前
GitHub Models - 尝试一下使用GitHub Models
microsoft·ai·微软·c#·github·.netcore
Dontla19 小时前
aio-pika介绍(基于asyncio的Python异步消息队列客户端,用于操作RabbitMQ,并实现对AMQP协议支持)
python·rabbitmq·ruby
_F_y1 天前
仿RabbitMQ实现消息队列-服务端核心模块实现(3)
c++·算法·rabbitmq
武藤一雄1 天前
WPF进阶:万字详解WPF如何性能优化
windows·性能优化·c#·.net·wpf·.netcore·鲁棒性
冷小鱼3 天前
消息队列(MQ)技术全景科普:从选型到AI+未来
人工智能·kafka·rabbitmq·rocketmq·mq·pulsar
_F_y3 天前
仿RabbitMQ实现消息队列-服务端核心模块实现(2)
网络·rabbitmq
io无心3 天前
SpringAMQP
rabbitmq·springamqp
fengxin_rou4 天前
RabbitMQ安装教程:windows本地安装和docker部署
java·分布式·后端·rabbitmq
Albert Edison4 天前
【RabbitMQ】RPC 通信(使用案例)
分布式·rpc·rabbitmq
weixin_419658315 天前
RabbitMQ 的高级特性
java·分布式·rabbitmq