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

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

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

相关推荐
完美火龙篇 四月的友1 天前
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
.net·.netcore
稚南城才子,乌衣巷风流3 天前
RabbitMQ 消息队列:从入门到实战
分布式·rabbitmq
过期动态4 天前
【LeetCode 热题 100】找到字符串中所有字母异位词
java·数据结构·算法·leetcode·职场和发展·rabbitmq
YDS8296 天前
大营销平台 —— 活动SKU库存扣减业务及其一致性处理
java·spring boot·redis·rabbitmq·ddd
霸道流氓气质6 天前
Kiro 中配置 RabbitMQ MCP Server 指南
分布式·rabbitmq·ruby
quweiie7 天前
tp8使用rabbitMQ消息队列的示例
消息队列·rabbitmq·thinkphp消息队列
六点_dn7 天前
RabbitMQ学习笔记-定义与作用
笔记·学习·rabbitmq
Steadfast_GG9 天前
RabbitMQ升级打怪之路(1) - RabbitMQ概述
消息队列·rabbitmq·流量削峰·消息分发·异步解耦
时代的狂10 天前
RabbitMQ 面试问答
分布式·面试·rabbitmq
半夜修仙10 天前
Spring集成邮箱功能
java·开发语言·spring boot·spring·rabbitmq·github·maven