【分布式事务】spring cloud集成lcn解决分布式事务
转自:https://www.cnblogs.com/sxdcgaq8080/p/9776695.html
参考地址:https://blog.csdn.net/u010882691/article/details/82256587
参考地址:https://blog.csdn.net/oyh1203/article/details/82189445
参考地址:https://blog.csdn.net/small_to_large/article/details/77836672 Spring Cloud Ribbon和Spring Cloud Feign
参考地址:https://blog.csdn.net/5iasp/article/details/79881691
事务等级:https://blog.csdn.net/gududedabai/article/details/82993700
目前,在Spring cloud 中服务之间通过restful方式调用有两种方式
- restTemplate+Ribbon
- feign
从实践上看,采用feign的方式更优雅(feign内部也使用了ribbon做负载均衡)。
zuul也有负载均衡的功能,它是针对外部请求做负载,那客户端ribbon的负载均衡又是怎么一回事?
客户端ribbon的负载均衡,解决的是服务发起方(在Eureka注册的服务)对被调用的服务的负载,比如我们查询商品服务要调用显示库存和商品明细服务,通过商品服务的接口将两个服务组合,可以减少外部应用的请求,比如手机App发起一次请求即可,可以节省网络带宽,也更省电。
ribbon是对服务之间调用做负载,是服务之间的负载均衡,zuul是可以对外部请求做负载均衡。
参考地址:https://blog.csdn.net/jrn1012/article/details/77837658/
因为LCN实现分布式事务的回滚,需要在服务内部 微服务之间的 负载均衡的 请求操作,故而需要在配置文件中加上ribbon的相关配置,它不与使用feign冲突!!!
lcn使用spring boot2.0 报错解决方案:https://www.jianshu.com/p/453741e0f28f
lcn集成到自己到自己的spring cloud项目中:https://blog.csdn.net/zhangxing52077/article/details/81587988
参考使用步骤1:
https://m.wang1314.com/doc/webapp/topic/20308073.html
修改LCN ,集成spring boot2.0
注意:LCN 4.1.0版本 目前不支持spring boot 2.x的版本,所以需要进行更改!!
【【因为我已经更改完成,打包了jar了,jar可以在百度网盘下载,然后直接走这一步的上传第三方jar包到本地maven仓库,然后在项目中直接引用即可】】
第一步:
先在lcn官网【http://www.txlcn.org/】 找到GitHub 地址【https://github.com/codingapi/tx-lcn】,拷下所有的源码
第二步:
解压下载的zip,放置在一个目录下,用IDEA打开【注意打开父层项目】
导入完整的jar包,然后下面就要开始更改源码中不支持spring boot 2.X的部分
第三步:
修改
transaction-springcloud 项目下com.codingapi.tx.springcloud.listener包中的ServerListener.java
源码更改为:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
第四步:
修改tx-manager项目下com.codingapi.tm.listener包中的ApplicationStartListener.java
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
第五步:
修改
tx-manager项目下com.codingapi.tm.manager.service.impl包中MicroServiceImpl.java类的getState()方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
第六步:
修改
tx-client下的com.codingapi.tx.aop.service.impl下的TransactionServerFactoryServiceImpl.java
修改这一截代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
第七步:
现在都更改完成了,然后需要将所有的项目打包,注意我将本组项目中所有pom文件中所有的的4.2.0-SNAPSHOT 都更改成了4.2.0,注意 是所有
改成了
然后点击右侧maven插件对每一个ms挨个进行打包【打包可能报错,解决方案:https://www.cnblogs.com/sxdcgaq8080/p/9841635.html https://www.cnblogs.com/sxdcgaq8080/p/9841701.html】
按照报错后的两个解决方案,进行打包完成后,可以看到
这些ms都已经打包完成了
第八步:
最后需要将所有修改完成的打包好的jar上传到自己本地的maven仓库中 【操作地址:https://www.cnblogs.com/sxdcgaq8080/p/7583767.html 最下方可以进行第三方jar包上传到自己的maven仓库中】
【jar可以在百度网盘下载,然后直接走这一步的上传第三方jar包到本地maven仓库,然后在项目中直接引用即可】【最新jar的使用参见https://www.cnblogs.com/sxdcgaq8080/p/7583767.html最下方】
【这里把上传第三方jar到本地仓库的命令给出来,也就是这两个jar】
mvn deploy:deploy-file -DgroupId=com.codingapi -DartifactId=transaction-springcloud -Dversion=4.2.0 -Dpackaging=jar -Dfile=D:\document\IdeaProjects\myTestDocument\jar\transaction-springcloud-4.2.0.jar -Durl=http://localhost:8081/repository/myself_hosted/ -DrepositoryId=myself_hosted mvn deploy:deploy-file -DgroupId=com.codingapi -DartifactId=tx-plugins-db -Dversion=4.2.0 -Dpackaging=jar -Dfile=D:\document\IdeaProjects\myTestDocument\jar\tx-plugins-db-4.2.0.jar -Durl=http://localhost:8081/repository/myself_hosted/ -DrepositoryId=myself_hosted
上传完了以后的位置如下:
注意 这里的版本都修改成了4.2.0
所以在引用的时候,在服务中引用的版本是4.2.0
这次启动引用了这两个jar的spring boot2.0的微服务,就可以成功了
将tx-Manager服务加入项目组,并启用【此时是eureka服务已经启动的情况下了,也就是说,微服务组引入修改以后的LCN jar依赖,已经可以成功启动的情况下】
1.同上面的第一步一样,进入官网,进入GitHub,拷贝所有源码
先在lcn官网【http://www.txlcn.org/】 找到GitHub 地址【https://github.com/codingapi/tx-lcn】,拷下所有的源码
2.解压缩,取出tx-manager服务,拷贝至项目组根目录下
3.将tx-Manager修改为本微服务组可以识别的子模块module
导入更新
4.更改tx-manager的application.properties,修改eureka的配置和redis的相关配置
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
5.启动启动类,即可访问tx-manager主页面