CapSupport 的使用
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);
}
}
他可以在执行第一个事务中执行另一个事务,并且在另一个事务执行完毕后决定第一个事务是否成功
可以等待一个订阅完成
CapSupport 的使用的更多相关文章
随机推荐
- kubernetes的ingress-nginx
这是一篇学习记录.记录kubernetes集群中如何将jenkins服务通过域名接入外部.由于是测试环境,域名是自定义的,解析写在/etc/hosts和自己本地的hosts中. 部署图: 一.部署后端 ...
- [复现论文程序图]High Speed Continuous Variable Source-Independent Quantum Random Number Generation
这次的任务是复现该文章的图2(C),过程如下. ①翻译了整篇文章,断断续续,花了3-4天时间. ②阅读文章,并且记录下每个符号的意义,记在单独的1个word文档里. ③开始编程,用的matlab201 ...
- Spring Bean的定义及作用域
目录: 了解Spring的基本概念 Spring简单的示例 Bean的定义 简单地说Bean是被Spring容器管理的Java对象,Spring容器会自动完成对Bean的实例化. 那么什么是容器呢?如 ...
- Apache Hudi 介绍与应用
Apache Hudi Apache Hudi 在基于 HDFS/S3 数据存储之上,提供了两种流原语: 插入更新 增量拉取 一般来说,我们会将大量数据存储到HDFS/S3,新数据增量写入,而旧数据鲜 ...
- shell脚本2——控制语句
1.顺序结构体 命令从上往下顺序执行 2.分支结构体 1)判断真假 test 表达式 或者 [ 表达式 ](必须有空格) 真返回0,假返回1 test的别名是[, 参数是] 判断表达式 记忆 解释 ! ...
- C# UTM坐标和WGS84坐标转换小工具
工具根据:http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html js代码改编 工具源码github:https://github. ...
- html基础——表格练习
最终样式 步骤分析: 标题和报名时间为一块 表格为一块 由图可知,可创建一个七行八列的列表存储数据 首先设置边框的样式,边框 大小,这里是黑色不好看可以设置为天空蓝 可选矿使用<input ty ...
- Java类的定义与类的实例化
目录 Java类的定义与类的实例化 类的定义 定义一个简单的类 定义一个成员变量 定义一个方法 定义一个构造器 类的实例化 创建对象及使用对象: 创建对象的过程在内存中的表现 Java类的定义与类的实 ...
- Java语法进阶10-多线程
多线程 并发与并行.进程,线程调度自行百度 线程(thread):是一个进程中的其中一条执行路径,CPU调度的最基本调度的单位.同一个进程中线程可以共享一些内存(堆.方法区),每一个线程又有自己的独立 ...
- Rust 入门 (三)_下
这部分我们学习 rust 语言的 变量.数据类型.函数.注释.流程控制 这五个方面的内容.前文介绍了前两个内容,本文介绍后三个内容. 函数 函数在 rust 代码普遍存在,我们也已经见过了它的主函数 ...