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 的使用的更多相关文章
随机推荐
- 【algo&ds】1.时间复杂度和空间复杂度分析
1.时间复杂度分析O(f(n)) 分析方法 只关注循环执行次数最多的一段代码 加法原则 乘法原则 高优先级原则 常见时间复杂度量级 多项式量级和非多项式量级.其中,非多项式量级只有两个:O(2^n) ...
- 016.Kubernetes二进制部署所有节点kube-proxy
一 部署 kube-proxy kube-proxy 运行在所有节点上,它监听 apiserver 中 service 和 endpoint 的变化情况,创建路由规则以提供服务 IP 和负载均衡功能. ...
- jenkins里的定时构建
1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月的第几天,取值1~31第四个*表示第几月,取 ...
- C++中对C的扩展学习新增语法——动态内存管理
1.C语言动态内存管理的缺点: 1.malloc对象的大小需要自己计算. 2.需要手动转换指针类型. 3.C++的对象不适合使用malloc和free. 2.C++中new/delete基本使用: 3 ...
- PHP 将数据从 Laravel 传送到 vue 的四种方式
在过去的两三年里,我一直在研究同时使用 Vue 和 Laravel 的项目,在每个项目开发的开始阶段,我必须问自己 “我将如何将数据从 Laravel 传递到 Vue ?”.这适用于 Vue 前端组件 ...
- [JQuery] JQuery学习笔记
1.2019年10月20日14:43:48 学习HOW2J. 2.JQuery是一个javascript的框架,是对javascript的一种封装, 通过JQuery可以非常方便的操作html的元素 ...
- 通过ESP8266调节继电器时间
通过ESP8266调节继电器时间 1.继电器选择(可调节时间的继电器) 2.继电器与esp8266的接线[set --- D6,UP --- D5,DOWN --- D1] 3.Arduino 程序 ...
- nyoj 42-一笔画问题 (欧拉图 && 并查集)
42-一笔画问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:25 题目描述: zyc从小就比较喜欢玩一些小游戏,其中就包括画 ...
- 【前端知识体系-JS相关】JS-Web-API总结
2.1 DOM操作 2.1.1 DOM的本质是什么? <!-- DOM树:二叉树 --> /* <?xml version="1.0" encoding=&quo ...
- TestNG+Maven+IDEA 环境配置+入门
一.环境配置 1.安装IDEA(参考:https://blog.csdn.net/m0_38075425/article/details/80883078) 2.在Prefernces,通过Plugi ...