saga+.net core 分布式事务处理
Apache ServiceComb Saga 是一个微服务应用的数据最终一致性解决方案
中文官方地址:https://github.com/apache/servicecomb-saga/blob/master/README_ZH.md
特性
- 高可用。支持集群模式。
- 高可靠。所有的事务事件都持久存储在数据库中。
- 高性能。事务事件是通过gRPC来上报的,且事务的请求信息是通过Kyro进行序列化和反序列化的。
- 低侵入。仅需2-3个注解和编写对应的补偿方法即可进行分布式事务。
- 部署简单。可通过Docker快速部署。
- 支持前向恢复(重试)及后向恢复(补偿)。
- 扩展简单。基于Pack架构很容实现多种协调机制。
架构
Saga Pack 架构是由 alpha 和 omega组成,其中:
- alpha充当协调者的角色,主要负责对事务进行管理和协调。
- omega是微服务中内嵌的一个agent,负责对网络请求进行拦截并向alpha上报事务事件。
alpha可以简单理解是事务处理的服务端,
omega是需要进行事务处理的客户端的SDK,在我的项目里,就是.net core应用程序的sdk,
幸运的是官方提供了C#语言版本Omega 可参见 https://github.com/OpenSagas-csharp/servicecomb-saga-csharp
数据库官方目前提供了两个:postpresql和mysql, 和alpha一样都可以通过docker快速部署,
部署服务端alpha-server
下面开始部署服务端alpha-server:
官方提供了用于快速部署的docker compose文件:
version: '2' services:
postgres:
image: postgres
container_name: postgres
ports:
- "5432:5432"
environment:
POSTGRES_USE: saga
POSTGRES_USER: saga
POSTGRES_PASSWORD: password
networks:
- saga alpha-server:
image: djlnet/alpha-server:0.3.0-SNAPSHOT
container_name: alpha-server
ports:
- "8080:8080"
- "8090:8090"
environment:
JAVA_OPTS: -Dspring.profiles.active=prd -Dspring.datasource.url=jdbc:postgresql://postgres/saga?useSSL=false
networks:
- saga
depends_on:
- postgres networks: saga:
driver: bridge
也就是说我们的环境首先要安装docker 和 docker-compose
安装成功后,我们运行docker-compose up -d命令
通过docker ps 可以看到容器已经启动:
通过netstat -ntlp 可以看到端口已经开启:
接下来,我们可以Navicat 12 for PostgreSQL 查看数据库是否正常
下载安装地址:https://www.navicat.com/en/download/navicat-premium
安装成功后,创建连接,测试连接:
alpha-server运行成功的标志,目前还没有一个UI,只能通过端口号是否运行,来判断了。
服务端的工作就已经完成了。
部署客户端
下面是客户端:可以直接参考上面链接中的github项目,里面提供了三个测试项目:
主要的工作如下:
- 设置对alpha-server的连接,注册自己
- 在事务开始的方法的打上attribute:SagaStart
- 添加事务补偿方法
代码非常简单:
每个项目添加代码:
在action方法上添加特性:SagaStart:
事务补偿特性和补偿方法:
部署完成后,就可以测试了,接口跑通后,就可以查看数据库那三张表:
saga+.net core 分布式事务处理的更多相关文章
- .NET分布式事务处理
在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.NET中的事务处理就能够满足我们的需要,但是,ADO.NET中的事 务不能同事对多个数据库连接进行原子性的操作:如果在你的业务环境中 ...
- .NET分布式事务处理总结【下】 - 包含MSMQ的分布式事务处理
转自:http://www.cnblogs.com/daxnet/archive/2011/03/15/1984995.html .NET直接提供对MSMQ的访问支持,只需要添加System.Mess ...
- 【JTA】JTA允许应用程序执行分布式事务处理
JTA,即Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序的JTA支持极大地增强了数据访问能力. htt ...
- ORA-02049: 超时: 分布式事务处理等待锁
java.sql.SQLSyntaxErrorException: ORA-02049: 超时: 分布式事务处理等待锁 ORA-06512: 在 "HECDEV.BGT_JOURNAL_BA ...
- .NET分布式事务处理(转)
出处:http://www.cnblogs.com/youring2/archive/2011/06/12/MSDTC.html 在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.N ...
- ASP.NET Core分布式项目实战
ASP.NET Core开发者成长路线图 asp.net core 官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/ ...
- 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案
SQL 错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有 01591. 00000 - "lock held by in-doubt distributed ...
- 【ITOO 4】WCF中,分布式事务处理
导读:事务可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.在项目中,就有 ...
- ASP.NET Core分布式项目-2.oauth密码模式identity server4实现
源码下载 这里根据<ASP.NET Core分布式项目-1.IdentityServer4登录中心>的代码来继续更新oauth密码模式,这里的密码模式比上次的客户端模式更安全 在WebAp ...
随机推荐
- OCR技术浅探 : 文字定位和文本切割(2)
文字定位 经过前面的特征提取,我们已经较好地提取了图像的文本特征,下面进行文字定位. 主要过程分两步: 1.邻近搜索,目的是圈出单行文字: 2.文本切割,目的是将单行文本切割为单字. 邻近搜索 我们可 ...
- 004-Shell 基本运算符、算术运算符、关系运算符、布尔运算符、辑运算符、字符串运算符、文件测试运算符
一.概述 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 二.算术运算符 原生bash不支持简单的数学运算,但是可以通过其他命 ...
- 宏表达式与函数、#undef、条件编译、
宏表达式在预编译期被处理,编译器不知道宏表达式的存在. 宏表达式没有任何的调用开销 宏表达式中不能出现递归定义. C语言中强大的内置宏 __FILE__:被编译的文件名 //双底线 __LINE__: ...
- Python(^^^^^小技巧^^^^^——不定期更新)
偶然想到的小技巧 ''' 交互中对传入函数的参数的数目进行检测 ''' def func(a,b,c): print(a,b,c) s=input(">>>>:&qu ...
- 实参相依查找[条款25]----《C++必知必会》
名字空间对现代C++编程和设计有着深远的影响.其中有些影响直接而明显,例如using声明和using 指令以及采用名字空间作用域加以限定的名字.然而,名字空间还有一些在语法上不那么明显但任然很有基础. ...
- maven 项目配置到tomcat不能正常启动
最近使用IntelliJ IDEA搭建公司项目,该项目是maven项目,加载jar和编译的时候没有任何异常,但是部署到tomcat上之后,就会出现如下异常: org.apache.catalina.L ...
- RPC细节
服务化有什么好处? 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图所示: 服务A:欧洲团队维护,技术背景是Java 服务B:美洲团队维护,用C++实现 ...
- 阿里云ECS服务器磁盘挂载(转)
买了阿里云的ECS云服务器,本机赠送20GB的磁盘,感觉不够用,又买了一块500GB的磁盘,本文就是记录怎么把这500GB的磁盘挂载上. 检查现在磁盘情况 我们可以看到买的那个500GB的磁盘没有出现 ...
- 关于iOS UIWebView 加载网页,点击网页内某些控件导致 Application 'UIKitApplication:xxx.xxx.xxx' was killed by jetsam.
问题:公司用的腾讯问卷系统,内嵌在我们应用或游戏的自定义UIWebView里面展示,发现在iOS 10 以下系统,点击圆形勾选框 会大概率出现闪退. 通过联调发现:报了这样一个警告Applicatio ...
- zookeeper和淘宝dubbo的关系
Dubbo建议使用Zookeeper作为服务的注册中心. 1. Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知 ...