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 的使用的更多相关文章
随机推荐
- ios遇到的坑
总结体会:很多ios兼容性问题都是由于body设置了height:100% ios中input输入不了 在ios中margin属性不起作用 设置html body的高度为百分比时,margin-bot ...
- Ubuntu字符界面与图形界面的切换
1.按ALT+CTRL+F1切换到字符界面 2.按ALT+CTRL+F7切换到图形界面
- opencv 4 图像处理(2 形态学滤波:腐蚀与膨胀,开运算、闭运算、形态学梯度、顶帽、黑帽)
腐蚀与膨胀 膨胀(求局部最大值)(dilate函数) #include <opencv2/core/core.hpp> #include <opencv2/highgui/highg ...
- 究极秒杀Loadrunner乱码
Loadrunner乱码一击必杀 之前有介绍一些简单的针对Loadrunner脚本或者调试输出内容中乱码的一些设置,但是并没能完全解决一些小伙伴的问题,因为那些设置实在能力有限,还是有很多做不到的事情 ...
- Java数组定义及初始化
数组定义及初始化 数组这玩意是一种用于存放数据最常见数据结构. 数组的的概念及注意点 数组要求所有的数组元素具有相同的数据类型,且只能存在一种数据类型,要多专一有多专一. 数据类型既可以是基本类型也可 ...
- Spring与Shiro整合 登陆操作
Spring与Shiro整合 登陆操作 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 编写登陆Controller方法 讲解: 首先,如果你登陆失败的时候,它会把你的异常信息丢到 ...
- jQuery学习笔记3
* 动画效果 * 在一定的时间内, 不断改变元素样式 * slideDown()/slideUp()/slideToggle() * fadeOut()/fadeIn()/fadeToggle() * ...
- 【原创】(十二)Linux内存管理之vmap与vmalloc
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- day 07 复习总结
今日主要内容 1. 补充基础数据类型的相关知识点 1. str. join() 把列表变成字符串 对应的是split () 表示把字符串变成列表. ()里面为分隔符,不写默认为空格分隔 1.吧 2. ...
- PowerMock学习(九)之Mock Answer的使用
关于Mock Answer 上一篇文章,有介绍过关于Arguments Matche的使用,其实 Answer的作用与其比较类似,但是它比 Arguments Matcher 更加强大. Argume ...