CapSupport 是在CAP的操作上做了一些封装

目的是让事务同时执行或者同时回滚

startup

  services.AddCapSupport((optaion) =>
{
optaion.SuccessTransactionfulName = "CapTest.ReceiveSuccessful";
optaion.RollbackTransactionfulName = "CapTest.ReceiveRollback";
optaion.CommitTransaction = (tran) =>
{
Console.WriteLine("事务执行成功");
((MsSqlContext)tran).Session.CommitTransaction();
};
optaion.RollbackTransaction = (tran) =>
{
Console.WriteLine("事务执行失败");
((MsSqlContext)tran).Session.RollbackTransaction();
};
});

Controller01

 MsSqlContext dbContext = new MsSqlContext("");
dbContext.Session.BeginTransaction();
try
{
var count = dbContext.Insert<AAA>(new AAA() { ID = , Name = "AAA" });
var action = _publisher.AsyncPerform(, dbContext,
new Person { Name = "Foo", Age = }, "CapTest05.Subscribe");
var result = await action;
Console.WriteLine(result.TransactionResult); }
catch (Exception e)
{
_publisher.RollbackMandatory();
}

Controller02

 [CapSubscribe("CapTest05.Subscribe")]
public async Task Subscribe(TransactionContent person)
{ Console.WriteLine("触发");
MsSqlContext dbContext = new MsSqlContext("");
dbContext.Session.BeginTransaction();
try
{
var count = dbContext.Insert<CCC>(new CCC() { ID = , Name = "CCC" });
var task = _publisher.AsyncPerform(, dbContext, new Person { Name = "Foo", Age = }, "CapTest04.Subscribe");
var result = await task;
Console.WriteLine(count);
switch (result.TransactionResult)
{
case SubscriptionServiceEnum.Successful:
_publisher.TransactionSuccessful(person);
break;
case SubscriptionServiceEnum.Failure:
_publisher.TransactionRollback(person);
break;
default:
break;
}
}
catch (Exception e)
{
_publisher.RollbackMandatory();
_publisher.TransactionRollback(person);
} }

Controller03

[CapSubscribe("CapTest04.Subscribe")]
public void Subscribe(TransactionContent person)
{
MsSqlContext dbContext = new MsSqlContext("");
dbContext.Session.BeginTransaction();
try
{
var count = dbContext.Insert<BBB>(new BBB() { ID = , Name = "BBB" });
Console.WriteLine("触发");
//throw new Exception("测试异常");
_publisher.TransactionSuccessful(person, dbContext);
}
catch (Exception e)
{
_publisher.TransactionRollback(person, dbContext);
} }

他可以在执行第一个事务中执行另一个事务,并且在另一个事务执行完毕后决定第一个事务是否成功

可以等待一个订阅完成

NUGET

GITHUB

CapSupport 的使用的更多相关文章

随机推荐

  1. [LC] 112题 路径总和(在二叉树里判断是否有哪条路径之和等于某个值)

    ①题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum ...

  2. idea2017建立jsp工程及tomcat等配置

    1:建立工程,选择Java Enterprise,可能需要选择tomcat路径和jdk路径: =============================== 以下作为第二种方式参考: 1:创建新工程 ...

  3. ubuntu18+uwsgi+nginx部署django项目

    更新系统软件源 sudo apt-get update pip3安装 sudo apt install python3-pip 安装virtualenvwrapper pip3 install vir ...

  4. css3布局-圣杯布局

    圣杯布局he双飞翼布局都是解决两边固定款中间自适应的三栏布局 圣杯布局为了中间div内容不被别的内容覆盖,将中间div设置了左右的内边距后,将左右两个div用相对布局position: relativ ...

  5. python:time模块

    (鱼c)time模块详解http://bbs.fishc.com/forum.php?mod=viewthread&tid=51326&extra=page%3D1%26filter% ...

  6. Bootstrap中手指控制轮播图切换

    通过手指的滑动来控制轮播图中的图片内容的切换 // 1. 获取手指在轮播图元素上的一个滑动方向(左右) // 获取界面上的轮播图容器 var $carousels = $('.carousel'); ...

  7. HTML页面插入图片,使用background还是img标签

    很多新手在刚开始学习HTML标签的时候,老师一定会教你 <img src="xxx.png"/> 这种引入图片格式,第二天学习css的时候,老师又会教你给div等元素添 ...

  8. LXC容器文件系统设计优化

    在HOST上面,一个LXC container包含一个config文件和一个rootfs目录. 早期我们在交叉编译系统上编译出container的rootfs之后,直接在编译系统上将其用tar压缩打包 ...

  9. Java基础知识总结之1.8新特性lambda表达式

    函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runnab ...

  10. Spring中常见的设计模式——工厂模式

    一.简单工厂模式 简单工厂模式(Simple Factory Pattern)由一个工厂对象决定创建哪一种产品类的实例,简单工厂模式适用于工厂类负责创建对象较少的情况,且客户端只需要传入工厂类的参数, ...