Fescar支持SpringCloud demo

代码引用的原文链接:https://blog.csdn.net/xc1158840657/article/details/88428068

写这篇文章的目的主要是希望给像我一样的小白在使用springcloud集成fescar一点帮助。

项目拆分成为微服务的过程中,原来由本地事务保证的ACID,在拆分为微服务后遇到了问题。原本一个本地事务被拆分到多个微服务,由多个本地事务组成。如何保证由多个微服务的本地事务还能像本地事务一样呢?这就要用到分布式事务框架。

分布式事务框架大体分为两种侵入式和非侵入式

非侵入式:

XA: 最早的分布式方案,成熟,但是需要数据库支持XA协议,mysql的话应该是5.0.3以后就支持了,但是数据库引擎必须是INNODB,同时存在bug,所以使用使用XA方案的话可能需要使用5.7以后的版本。该方案在2pc阶段会持续占用数据库资源,效率不高。

Fescar:阿里开源的非侵入式开源分布式事务方案。可以理解为XA方案的升级版,不需要数据库XA的支持。目前版本0.4.1支持dubbo PRC,不支持springCloud。

侵入式:

TCC:这种方案也有项目落地,但是需要编写代码来实现回滚,开发代价高。

 

在网上查阅资料发现fescar就可以简单修改代码实现对springCloud的支持。

直接上代码吧,github地址https://github.com/lalagou/springcloud_fescar

 

这是我本地的测试代码,环境idea+windows

运行步骤:

1.下载fescar-service,解压,运行bin/fescar-server.bat 文件。fescar-service相当于TC的功能吧。

fescar-service下载地址  https://github.com/seata/seata/releases

2.执行fescar-demo.sql文件

3.运营一个eurake工程作为服务的注册中心。可以通过idea自动生成代码都不用写。主要是

@EnableEurekaServer注解和yaml文件中defalutZone配置。

4.account-service,business-service,order-service,storage-service四个服务都启动起来。

5.运行postman或者其他工具发送请求,参数

url: http://localhost:11112/business

method: PUT

header: contentType = application/json

requestBody:

{
“userId”:“U100001”,
“commodityCode”:“C00321”,
“orderCount”:2
}
 

如果程序启动报错,请查看对比如下事项:

1.fescar-service的版本要与工程pom的依赖版本一致,不然可能报错。我的demo中的版本是0.4.1所以fescar-service也运行0.4.1的版本比较好。

2.工程中不要启用feign.hystrix.enabled,也就是feign.hystrix.enabled=false。如果启用的XID传递不出来,因为XID是保存在

ThreadLocal变量中的。话feign.hystrix.enabled=true的话可以查看一下日志会启动一个新线程。这个问题搞了几天需要注意一下。

这里的具体原因可以参考https://segmentfault.com/a/1190000018438157?utm_source=tag-newest 提到的 Hystrix 隔离 中的分析与解决方法。

 

fescar的分布式事务执行流程是怎么样的?

1.TM向TC(fesacr-service)申请一个全局事务,XID

2.XID通过请求在微服务中传播

3.微服务中的RM向TC注册事务申请加入全局事务

4.TM提交决议,事务提交或者回滚

5.TC协调各微服务本地事务回滚或者提交。

 

demo工程TM,RM模块是怎么与TC (fescar_service)联系起来的?

TM,RM是随demo一起在服务端,demo用的是默认配置,默认走的file类型的配置。在demo依赖的fescar-config包中有一个文件叫file.conf。其中的default.grouplist就是fescar-service的ip与端口。

 

demo与fescar-service运行在一个服务器没有问题,如果fescar-service,demo运行在不同的服务器上怎么办呢?

其实看了在上了一个问题中提到的file.conf的话,就知道只要修改default.grouplist=127.0.0.1:8091默认配置为我们想要端口就可以了。复制file.conf文件,修改default.grouplis为我们自己的fescar-service的ip与端口,放在自己项目的resources目录下,重新启动。

 

 

怎么设置fescar-service本身的启动端口?

cmd fescar-server.bat $LISTEN_PORT $PATH_FOR_PERSISTENT_DATA $IP(此参数可选)

服务端口 PATH_FOR_PERSISTENT_DATA: 事务操作记录文件存储路径(已存在路径)

LISTEN_PORT:为启动端口

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值