如何在 ASP.NET Core 中自动启用 CAP 事务实现分布式事务管理?

2026-04-01 10:001阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计733个文字,预计阅读时间需要3分钟。

如何在 ASP.NET Core 中自动启用 CAP 事务实现分布式事务管理?

目录

一、发布端事务

二、消费端事务

1.创建一个CAP过滤器

2.配置过滤器

本章文章将介绍如何在ASP.NET Core项目中以一种简便的方式启用CAP事务。由于示例中都是直接引用,内容不超过100字。

如何在 ASP.NET Core 中自动启用 CAP 事务实现分布式事务管理?

目录
  • 一、发布端事务
  • 二、消费端事务
    • 1、创建一个 CAP 过滤器
    • 2、配置过滤器

本篇文章旨在描述如何在 ASP.NET Core项目中并以一种简便的方式启用CAP事务,因为在我们的示例中都是直接演示比较直观的方式,没有进行封装,有些初学者同学不太会,找到问我如何封装,本篇文章主要是一个简单的演示。

在本示例中 ,我们主要是基于 Entity Framework 来进行演示,如果你使用其他 Orm 原理类似,大家参考即可。

一、发布端事务

由于大部分人都是在 Web 中使用,所以可以通过使用 ASP.NET Core 过滤器的方式进行,当然也可以通过中间件,原理是一致的。

1、创建一个 TypeFilter,命名为 CapTransactionFilterAttribute

public class CapTransactionFilterAttribute : TypeFilterAttribute { public CapTransactionFilterAttribute() : base(typeof(TransactionActionFilter)) { } public class TransactionActionFilter : IActionFilter { private IDbContextTransaction _transaction; public void OnActionExecuting(ActionExecutingContext context) { var dbContext = context.HttpContext.RequestServices.GetRequiredService<AppDbContext>(); var capPublisher = context.HttpContext.RequestServices.GetService<ICapPublisher>(); _transaction = dbContext.Database.BeginTransaction(capPublisher); } public void OnActionExecuted(ActionExecutedContext context) { if (context.Exception == null) { _transaction.Commit(); } else { _transaction.Rollback(); } _transaction?.Dispose(); } } }

2、使用方式,在需要进行事务控制的 Action 上添加 [TypeFilter(typeof(CapTransactionFilterAttribute))] 即可生效。

[Route("~/ef/trans-filter")] [TypeFilter(typeof(CapTransactionFilterAttribute))] public IActionResult EntityFrameworkWithTransactionFilter( [FromServices] AppDbContext dbContext) { dbContext.Persons.Add(new Person() { Name = "ef.transaction" }); _capBus.Publish("sample.rabbitmq.mysql", DateTime.Now); dbContext.SaveChanges(); return Ok(); }

二、消费端事务

消费端自动事务主要利用 CAP 提供的过滤器来进行开启,需要 CAP 版本大于 5.1.0。

1、创建一个 CAP 过滤器

public class MyCapFilter : SubscribeFilter { private readonly AppDbContext _dbContext; private IDbContextTransaction _transaction; public MyCapFilter(AppDbContext dbContext) { _dbContext = dbContext; } public override void OnSubscribeExecuting(ExecutingContext context) { _transaction = _dbContext.Database.BeginTransaction(); } public override void OnSubscribeExecuted(ExecutedContext context) { _transaction.Commit(); } public override void OnSubscribeException(DotNetCore.CAP.Filter.ExceptionContext context) { _transaction.Rollback(); } }

2、配置过滤器

services.AddCap(opt => { // *** }.AddSubscribeFilter<MyCapFilter>();

以上就是消费端的一个简单示例。

到此这篇关于在 ASP.NET Core 中自动启用 CAP 事务详情的文章就介绍到这了,更多相关在 ASP.NET Core 中自动启用 CAP 事务内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

本文共计733个文字,预计阅读时间需要3分钟。

如何在 ASP.NET Core 中自动启用 CAP 事务实现分布式事务管理?

目录

一、发布端事务

二、消费端事务

1.创建一个CAP过滤器

2.配置过滤器

本章文章将介绍如何在ASP.NET Core项目中以一种简便的方式启用CAP事务。由于示例中都是直接引用,内容不超过100字。

如何在 ASP.NET Core 中自动启用 CAP 事务实现分布式事务管理?

目录
  • 一、发布端事务
  • 二、消费端事务
    • 1、创建一个 CAP 过滤器
    • 2、配置过滤器

本篇文章旨在描述如何在 ASP.NET Core项目中并以一种简便的方式启用CAP事务,因为在我们的示例中都是直接演示比较直观的方式,没有进行封装,有些初学者同学不太会,找到问我如何封装,本篇文章主要是一个简单的演示。

在本示例中 ,我们主要是基于 Entity Framework 来进行演示,如果你使用其他 Orm 原理类似,大家参考即可。

一、发布端事务

由于大部分人都是在 Web 中使用,所以可以通过使用 ASP.NET Core 过滤器的方式进行,当然也可以通过中间件,原理是一致的。

1、创建一个 TypeFilter,命名为 CapTransactionFilterAttribute

public class CapTransactionFilterAttribute : TypeFilterAttribute { public CapTransactionFilterAttribute() : base(typeof(TransactionActionFilter)) { } public class TransactionActionFilter : IActionFilter { private IDbContextTransaction _transaction; public void OnActionExecuting(ActionExecutingContext context) { var dbContext = context.HttpContext.RequestServices.GetRequiredService<AppDbContext>(); var capPublisher = context.HttpContext.RequestServices.GetService<ICapPublisher>(); _transaction = dbContext.Database.BeginTransaction(capPublisher); } public void OnActionExecuted(ActionExecutedContext context) { if (context.Exception == null) { _transaction.Commit(); } else { _transaction.Rollback(); } _transaction?.Dispose(); } } }

2、使用方式,在需要进行事务控制的 Action 上添加 [TypeFilter(typeof(CapTransactionFilterAttribute))] 即可生效。

[Route("~/ef/trans-filter")] [TypeFilter(typeof(CapTransactionFilterAttribute))] public IActionResult EntityFrameworkWithTransactionFilter( [FromServices] AppDbContext dbContext) { dbContext.Persons.Add(new Person() { Name = "ef.transaction" }); _capBus.Publish("sample.rabbitmq.mysql", DateTime.Now); dbContext.SaveChanges(); return Ok(); }

二、消费端事务

消费端自动事务主要利用 CAP 提供的过滤器来进行开启,需要 CAP 版本大于 5.1.0。

1、创建一个 CAP 过滤器

public class MyCapFilter : SubscribeFilter { private readonly AppDbContext _dbContext; private IDbContextTransaction _transaction; public MyCapFilter(AppDbContext dbContext) { _dbContext = dbContext; } public override void OnSubscribeExecuting(ExecutingContext context) { _transaction = _dbContext.Database.BeginTransaction(); } public override void OnSubscribeExecuted(ExecutedContext context) { _transaction.Commit(); } public override void OnSubscribeException(DotNetCore.CAP.Filter.ExceptionContext context) { _transaction.Rollback(); } }

2、配置过滤器

services.AddCap(opt => { // *** }.AddSubscribeFilter<MyCapFilter>();

以上就是消费端的一个简单示例。

到此这篇关于在 ASP.NET Core 中自动启用 CAP 事务详情的文章就介绍到这了,更多相关在 ASP.NET Core 中自动启用 CAP 事务内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!