最新在更新LCN,由4.0更新到了5.0,这里说说更新遇到的问题,官方在5.0.1版本开始兼容了springboot1.5版本,但是整合的时候还是需要注意一些问题。
1.maven的引包需要改变,本人使用的是最新的5.0.2版本
<-- 下面两个包的版本号最好与springboot版本一致,在txlcn-tc中,引入了这两个包,并且版本号为2.0.5,该操作用于覆盖2.0.5版本的包 -->org.springframework.boot spring-boot-starter-actuator 1.5.6.RELEASE <-- 官方文档给出的解决方案,txlcn-tc中引入的是2.0.5版本,要换成1.3.5版本 --> org.springframework.boot spring-boot-configuration-processor 1.5.6.RELEASE org.springframework.cloud spring-cloud-commons 1.3.5.RELEASE com.codingapi.txlcn txlcn-tc 5.0.2.RELEASE com.codingapi.txlcn txlcn-txmsg-netty 5.0.2.RELEASE
2.代码需要做一些改变
a.启动类需要加上@EnableDistributedTransaction注解;
b.用到了分布式事务的方法上注解由@TxtTransaction改为@LcnTransaction,当然,还有txc、tcc和自定义的用法,具体可查看官方文档,这里就不赘述了。
3.到官方github上下载tx-lcn,并修改配置,只列出个人认为有用的配置,具体配置请查看官方文档
spring.application.name=tx-manager #lcn5.0集成了管理页面,该端口为访问管理页面的端口server.port=8899spring.datasource.driver-class-name=com.mysql.jdbc.Driver #lcn将异常事务日志存到了数据库中,需要建立tx-manager数据库,并在数据库中建立t_tx_exception表,sql文件可在txlcn-tm中找到spring.datasource.url=jdbc:mysql://127.0.0.1:3306/tx-manager?characterEncoding=UTF-8spring.datasource.username=rootspring.datasource.password=123456# TxClient连接请求端口,官方文档说默认是8070端口,但测试发现,TxManagerConfig类中的port属性并没有设置默认值,所以不设置端口客户端会找不到tx-managertx-lcn.manager.port=8070 #redis 主机,熟悉lcn的会知道,lcn将事务组信息存到了redis中spring.redis.host=127.0.0.1#redis 端口spring.redis.port=5379#redis 密码spring.redis.password=123456
自此,springboot1.5.6和lcn5.0的整合完毕
问题:当然,现在5.0.2版本还是有些不足,比如客户端启动后如果找不到tx-manager,则只会重试8次,并且无法配置不限重试次数,也就是说tx-manager需要在客户端之前启动才比较稳妥。
个人认为最好能让客户端一直重试,这样如果lcn挂了,再启动时,不需要把客户端也重启。
解决这个问题本人目前是通过修改lcn的部分源码,下篇博客再做介绍。
总的来说,LCN5.0比4.0是很大的跨越,做了很多优化,也新增了很多功能,以下举例以下个人认为受益很大的优化
1、新增管理页面,通过管理页面可以看到连接tx-manager的客户端,也可以看到lcn管理范围下出现的异常事务;
2、解决4.0中客户端找不到tx-manager而启动失败的问题,5.0版本中,客户端启动时就算找不到tx-manager,依然不影响客户端的启动,只是使用了lcn的方法会报空指针异常,避免了因为lcn而影响了模块的其他功能。
3、新增了txc、tcc和自定义的事务模式,符合更多的业务场景(虽然本人目前只使用了lcn模式)