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. JenKins结合cppcheck及cpplint进行代码风格及静态代码检测

    JenKins结合cppcheck及cpplint 最近公司需要在Jenkins上安装cppcheck及cpplint进行代码风格及静态代码检测,这里记录下过程. 前提条件 安装了Jenkins 步骤 ...

  2. pat 1041 Be Unique(20 分)

    1041 Be Unique(20 分) Being unique is so important to people on Mars that even their lottery is desig ...

  3. C语言|博客作业09

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027 我在这个课程 ...

  4. 管理系统和服务systemctl(centos6:chkconfig、service命令)

    传统:SysV init 红帽6.Ubuntu6:采用Upstart 红帽7:采用全新的Systemd SysV init运行级别,主题思想是串行的启动所有将来需要用到的服务(所以计算机没有利用多CP ...

  5. 树的点分治 (poj 1741, 1655(树形dp))

    poj 1655:http://poj.org/problem?id=1655 题意: 给无根树,  找出以一节点为根,  使节点最多的树,节点最少. 题解:一道树形dp,先dfs 标记 所有节点的子 ...

  6. 023.掌握Pod-Pod扩容和缩容

    一 Pod的扩容和缩容 Kubernetes对Pod的扩缩容操作提供了手动和自动两种模式,手动模式通过执行kubectl scale命令或通过RESTful API对一个Deployment/RC进行 ...

  7. Flex容器拖动(Bordercontainer为例)

    Bordercontainer的拖放到任意位置. mxml: 为Bordercontainer添加鼠标按下和弹起事件 <s:BorderContainer id="bdShow&quo ...

  8. 小程序api的promise封装

    微信小程序和支付宝小程序的api封装方法是一样的,都是外部新建一个js,使用module.exports导出,要注意的是,最好使用post请求,虽然get请求没什么不好,主要是好修改.这里使用的MD5 ...

  9. 2019-10-11:渗透测试,基础学习,php+mysql连接,笔记

    mysql导出数据1,通过工具如phpmyadmin,navicat等2,mysqldump -u -p 库名 > /数据库文件, mysqldump -u -p 库名 表名 > /表数据 ...

  10. cenos7搭建gitlab

    git.github和gitlab的区别 git:是一种版本控制系统,是一个命令,是一种工具 gitlib:是基于实现功能的开发库 github:是一个基于git实现的在线代码仓库软件 gitlib可 ...