.net core 自带分布式事务的微服务开源框架JMS
事务的统一性是微服务的一个重点问题,简洁有效的控制事务,更是程序员所需要的。JMS的诞生,就是为了更简单、更有效的控制事务。
先看一段调用微服务的代码:
using (var ms = new JMSClient())
{
//调用用户信息微服务,创建新用户
var uis = ms.GetMicroService<UserInfoService>();
var userid = uis.CreateUser(); //调用银行微服务,创建用户的银行账号
var bks = tran.GetMicroService<BankService>();
bks.CreateBankAccount( userid ); //统一提交事务
ms.Commit();
}
代码中,分别调用了两个不同的微服务,做了一些业务操作,最后,通过Commit方法,统一提交这两个微服务的事务。
由于tran对象被using包裹,在这中间,任意一个代码发生异常,整体事务都会被回滚。
这样的代码风格,比较简洁,也符合一贯的编程习惯。
我们再看一下微服务端的代码:
UserInfoService:
public int CreateUser(TransactionDelegate tranDelegate)
{
var dbContext = new UserInfoDBContext(); //编写新增用户的业务代码
......... //把数据库的事务提交和回滚,放到委托当中
tranDelegate.CommitAction = () => dbContext.CommitTransaction();
tranDelegate.RollbackAction = () => dbContext.RollbackTransaction(); return newUserId;
}
BankService:
public int CreateBankAccount(TransactionDelegate tranDelegate,int userid)
{
var dbContext = new BankDBContext(); //...编写创建银行账户的业务代码 //把数据库的事务提交和回滚,放到委托当中
tranDelegate.CommitAction = () => dbContext.CommitTransaction();
tranDelegate.RollbackAction = () => dbContext.RollbackTransaction(); return userBankId;
}
微服务写完业务逻辑,最后,把事务的提交和回滚放到委托当中,由框架自动调用。
JMS会在所有微服务执行完毕后,统一调用微服务挂起的委托,提交事务。如果有任意一个微服务执行出错、宕机或者离线,其他微服务的操作会被回滚,而离线的微服务,它所挂起的事务,也会在10秒之内回滚。
而分布式事务,有一种情况是无法避免的,就是最终统一提交事务时,虽然确认了各个微服务器响应正常,可以正常提交事务,这时候,所有服务器响应号召,提交了事务,但是,最后发现,有一台服务器宕机了。这种情况,是分布式系统无法避免的,但是,通过执行日志所提供的数据,可以把宕机的服务,手动再执行一次。
JMS特性
1、支持分布式事务控制;
2、支持分布式事务锁;
3、网关支持双机热备;
4、支持配置文件统一在网关部署、更新;
5、支持SSL双向校验;
6、可自定义定时任务;
7、负载均衡根据微服务的CPU使用率和当前请求数进行平均分配,也可自己编写负载均衡规则;
8、支持小巧的双重加密token(长度为68字符),实现用户无状态登录;
JMS支持的网络架构方案
方案1:只暴露应用服务器
这是应用服务器和微服务沟通,效率最高的方案,也是我们使用最多的。如果我们的服务器不是要部署在全国各地,那么可以多台服务器使用同一个局域网,只暴露应用服务器作为唯一的访问入口。
方案2:暴露应用服务器和代理服务器
服务器需要分布在不同的地域,为了安全起见,可以通过一个代理服务器,访问网关和微服务。
方案3:暴露所有服务器
服务器需要分布在不同的地域,为了更高的效率和更低的成本,可以把所有服务器暴露在互联网上,与服务器之间的通讯,经过SSL双向加密机制保证安全。
以上3个方案便是JMS所支持的网络架构,根据实际情况,自由配置适合自己的方案。
这里给出JMS的源码库地址:
https://github.com/simpleway2016/JMS
.net core 自带分布式事务的微服务开源框架JMS的更多相关文章
- Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
前方: 开源地址:https://github.com/cyq1162/Taurus.MVC 上篇文章介绍过:工业制造行业的低代码开发平台思维架构图 规划中涉及到了微服务,近些天经过努力和不断的代码与 ...
- .NET Core 事件总线,分布式事务解决方案:CAP
背景 相信前面几篇关于微服务的文章也介绍了那么多了,在构建微服务的过程中确实需要这么一个东西,即便不是在构建微服务,那么在构建分布式应用的过程中也会遇到分布式事务的问题,那么 CAP 就是在这样的背景 ...
- .NET Core 事件总线,分布式事务解决方案:CAP 基于Kafka
背景 相信前面几篇关于微服务的文章也介绍了那么多了,在构建微服务的过程中确实需要这么一个东西,即便不是在构建微服务,那么在构建分布式应用的过程中也会遇到分布式事务的问题,那么 CAP 就是在这样的背景 ...
- .net core 下的分布式事务锁
原文:.net core 下的分布式事务锁 目录 系统分布式锁的用法 锁的实现 锁的使用 API内的范例: 引用链接 系统分布式锁的用法 公司框架新增功能分布式锁: 锁的性能之王: 缓存 > Z ...
- 【转】.NET Core 事件总线,分布式事务解决方案:CAP
[转].NET Core 事件总线,分布式事务解决方案:CAP 背景 相信前面几篇关于微服务的文章也介绍了那么多了,在构建微服务的过程中确实需要这么一个东西,即便不是在构建微服务,那么在构建分布式应用 ...
- asp.net core集成CAP(分布式事务总线)
一.前言 感谢杨晓东大佬为社区贡献的CAP开源项目,传送门在此:.NET Core 事件总线,分布式事务解决方案:CAP 以及 如何在你的项目中集成 CAP[手把手视频教程],之前也在工作中遇到分布式 ...
- 转载:把你的精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架构,微服务,以及相关的项目管理等等,这样你的核心竞争力才会越来越高
https://developer.51cto.com/art/202001/608984.htm 把你的精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架 ...
- Asp.Net Core&CAP实现分布式事务
需要注意的是标题中的CAP不是指的CAP理论,而是园区大神杨晓东实现的框架,CAP框架基于本地消息表用最终一致性实现分布式事务. 本地消息表 首先我们考虑一个场景,在将用户信息更改后,需要发送一条消息 ...
- 分布式事务之TCC服务设计和实现注意事项
分布式事务之TCC服务设计和实现注意事项-云栖社区-阿里云 https://yq.aliyun.com/articles/609854 分布式事务之TCC事务丶一个站在Java后端设计之路的男青年个人 ...
随机推荐
- ATM项目分析
ATM项目分析 项目源代码下载 其实本项目的需求分析乍一看比较复杂,但是细细拆分出来实际实现还是比较容易的.基本用上前面所学的所有知识点. 1.额度 15000或自定义 2.实现购物商场,买东西加入购 ...
- 如何获取自定义meta标签信息?
<meta name="apple-itunes-app" content="app-id=432274380" /> 类似于这种meta信息,js ...
- nginx使用热部署添加新模块
简介 当初次编译安装nginx时,http_ssl_module 模块默认是不编译进nginx的二进制文件当中,如果需要添加 ssl 证书.也就是使用 https协议.那么则需要添加 http_ssl ...
- jQuery jqGrid 4.7
https://jeesite.gitee.io/front/jqGrid/4.7/index.html https://jeesite.gitee.io/front/jqGrid/4.7/jqgri ...
- day68 form组件
目录 一.自定义分页器的拷贝和使用 二.Forms组件 1 前戏 2 form组件的基本功能 3 基本使用 4 基本方法 5 渲染标签 6 展示提示信息 7 钩子函数(HOOK) 8 forms组件其 ...
- day15 作业
day15 作业 目录 day15 作业 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第一题 ===================题目一=================== input ...
- es6新增特性总结
定义 ES6是ECMA为JavaScript制定的第6个标准版本,标准委员会决定,标准在每年6月正式发布并作为当年的正式版本,接下来的时间里就在此版本的基础上进行改动,直到下一年6月草案就自然变成新一 ...
- 【RCTF-2015】bug
信息: 题目来源: RCTF-2015 标签:PHP.SQL注入 解题过程 访问网址,提示需要登陆: 使用admin用户名进行注册,提示: 对登陆页面与注册页面进行Fuzz,没有发现注入点. 登陆后页 ...
- python 装饰器(一):装饰器基础(一)装饰器形式,何时执行
简介 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象. 形式 假如有个名为 decorate 的装饰器: ...
- 数据可视化之DAX篇(二十五)PowerBI常用的度量值:累计至今
https://zhuanlan.zhihu.com/p/64999937 经常碰到本年至今.本月至今的数据计算,其实还有一类计算是,从历史最早日期至今的累计计算,比如从开业到现在总共卖出了多少件商品 ...