【分布式事务】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

源码更改为:

 View Code

 第四步:

修改tx-manager项目下com.codingapi.tm.listener包中的ApplicationStartListener.java

 View Code

第五步:

修改

tx-manager项目下com.codingapi.tm.manager.service.impl包中MicroServiceImpl.java类的getState()方法

 View Code

第六步:

 修改

tx-client下的com.codingapi.tx.aop.service.impl下的TransactionServerFactoryServiceImpl.java

修改这一截代码:

 View Code

第七步:

现在都更改完成了,然后需要将所有的项目打包,注意我将本组项目中所有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:documentIdeaProjectsmyTestDocumentjar	ransaction-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:documentIdeaProjectsmyTestDocumentjar	x-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的相关配置

 View Code

5.启动启动类,即可访问tx-manager主页面

地址:http://localhost:7000/

原文地址:https://www.cnblogs.com/edwardsai/p/10334636.html