分布式事务框架选型

个人发展建议:研究源码,知核心,知原理,清楚了解细节,甚至改造,自己写!!

各组件框架选型建议:看好官方文档各种功能的生产建议和网上专业生产建议,尽量不要使用版本太新的,或刚开源的别人也知之甚少、踩坑少的框架,和官方都不建议生产环境使用的各种功能,没有生产安全保障!!

关于Eureka等注册中心的选型:选CA会导致选举过程中整个中心挂掉,无法访问!--而这绝不该在生产环境出现。看好文档和博文的意思。Eureka的优点就在于AP,可以保证高可用,牺牲CA的严格一致性(CA是以牺牲可用性为代价吗?)。

LCN5.0.0.RC1(直接支持spring boot 2.0)踩坑记录

1.要想加入分布式事务,需要启动tx-manager服务,这里采用的是直接将源码工程clone下来,maven编译,控制台启动,服务端口8069,注册分布式事务的客户端访问端口为8070

修改tx-manager服务的工程配置文件application.properties:

从服务的配置文件中看,需要手动创建tx-manager库,并在该库创建官网http://www.txlcn.org/zh-cn/docs/demo/env.html要求的库下的表

创建带'-'的库异常问题解决:加上反引号,参考https://www.aliyun.com/jiaocheng/1107307.html

2.tx-manager的客户端访问注册事务端口,是通过启动Netty原生服务端,客户端使用Netty原生客户端,加上心跳Handler维持长连接实现的,

事务注册客户端和tx-manager均依赖tx-lcn依赖下的子依赖包tx-spi-message-netty,而且客户端是通过这个依赖包到tx-manager进行分布式服务注册的

客户端client工程配置了一个

tx-lcn.client.manager-address=127.0.0.1:8070

参数,另外两个被调用的工程并没有,但打印的启动日志中发现也注册到了tx-manager,具体原理和默认注册端口待查(或为自动配置),相关Netty服务依赖的类都在这个包中,具体看类:

com.codingapi.txlcn.spi.message.netty.impl.NettyRpcServerInitializer和com.codingapi.txlcn.spi.message.netty.impl.NettyRpcClientInitializer

配置一系列handler的InitHandler类参照:

com.codingapi.txlcn.spi.message.netty.handler.NettyRpcServerHandlerInitHandler和com.codingapi.txlcn.spi.message.netty.handler.NettyRpcClientHandlerInitHandler

这两个InitHandler类里配置了编解码、粘包拆包、心跳维持等相关,具体看其配置的handler类

这样客户端可顺利连接服务端并维持这个长连接,用于支持分布式事务各节点和tx-manager的即时通信

3.要想顺利使用maven编译打包,需要去掉tx-lcn根工程里的maven-gpg-plugin插件依赖,否则maven编译报错!!

4.若要修改tx-lcn分布式事务框架源码,可以直接在clone下来的源码中改,maven编译打包的本地maven仓库,生成的依赖包和直接dependency引用jar包的gav三坐标是

一样的,这时在演示工程中引用tx-lcn依赖时,只要引用同一个本地maven库的tx-lcn依赖,就可顺利将原来从阿里云下载的tx-lcn依赖替换为你修改过源码安装到本地库的

tx-lcn依赖,因为它们的gav是一样的,且在同一个仓库,修改过源码的tx-lcn依赖会覆盖掉原来从阿里云下载的tx-lcn依赖

5.演示工程txlcn-demo的各个子工程,需要注册到Consul服务端,如果简单去掉其子工程的Consul依赖和服务发现注解,服务启动会报错!!导致启动失败,

注意这个启动失败会造成服务无法访问!!可能是因为Spring容器创建Bean失败造成容器初始化失败,所以需要启动一个本地的Consul服务端,默认注册端口8500,Web管理端口也是这个

6.按照演示工程配置文件创建数据库和表,注意连接参数spring.datasource.hikari.maximum-pool-size都要设置的小一些,否则提示数据库连接过多,还有这里的数据库连接使用了ssl造成启动时连接警告

这些应该都可以通过调整mysql服务端配置进行修改,待查

7.注册到Consul的演示子工程,服务名有问题,造成通过Feign声明式客户端直接通过服务名调用时失败,这里的问题待查,暂时将Feign声明式访问改为不通过注册中心的url方式

@FeignClient(name = "spring-demo-d",url = "127.0.0.1:12002")

参照:https://www.jianshu.com/p/996347925e48

这样就能正常地通过RPC(Rest方式)访问服务了,否则调用会报错,造成分布式事务演示失败,这并不是分布式事务的问题!!

因服务名错误而调用异常的报错原理参照:https://blog.csdn.net/qq_38958113/article/details/82885160

有时间要仔细分析Spring Cloud各个组件原理,关键类,流程架构,源码!!

Consul相关:

官网:https://learn.hashicorp.com/consul/

Consul与Eureka等对比和启动参考:

Win版启动和例子:http://blog.51cto.com/ityouknow/2147587

Linux集群和管理客户端版:https://www.cnblogs.com/yjmyzz/p/replace-eureka-with-consul.html

转自didispace的:https://blog.csdn.net/ZYC88888/article/details/81453647

Spring Cloud整合Consul:

Feign客户端及负载均衡调用(含GitHub代码示例):https://www.cnblogs.com/soinve/p/9673738.html

服务调用示例:https://blog.csdn.net/qq_26641781/article/details/82080659

服务发现与配置管理(含GitHub源码示例):https://blog.csdn.net/bawcwchen/article/details/80645540

LCN旧版本修改支持spring boot 2.0的方案:https://www.cnblogs.com/sxdcgaq8080/p/9776695.html

https://www.jianshu.com/p/453741e0f28f

https://blog.csdn.net/zhuwei_clark/article/details/82837429

官方网站:http://www.txlcn.org/zh-cn/

GitHub地址:https://github.com/codingapi/tx-lcn/

GitHub Wiki:https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86

阿里Fescar(GTS开源版本,GTS有阿里云服务)官方中文:https://github.com/alibaba/fescar/wiki/Home_Chinese

开源消息和与其他分布式框架(ByteTCC、LCN)对比:https://blog.csdn.net/xlgen157387/article/details/86289066

介绍和对比:https://blog.csdn.net/weixin_39800144/article/details/86498296

原文地址:https://www.cnblogs.com/free-wings/p/10281198.html