全局事务管理

gts

名称:全局事务管理服务

起始版本:v2.0.0


https://github.com/chenjy16/gts

需要

jdk1.8

lombok

redis

代码工程介绍

gts-remoting : 通讯模块

gts-dubbo:客户端模块

gts-core:客户端核心逻辑模块

gts-manage:事务协调模块

gts-nameserver:注册中心模块

reids : 缓存工具类

框架特性

支持dubbox框架进行分布式事务

事务发起者,参与者与协调者底层基于netty长连接通信

协调者采用gts-nameserver做注册中心,支持集群模式

采用Aspect AOP 切面思想与Spring无缝集成

非强一致性控制,在网络不通等极端情况下可能导致数据不一致,需要告警人工介入

事务角色

事务发起者(可理解为消费者 如:dubbo的消费者),发起分布式事务

事务参与者(可理解为提供者 如:dubbo的提供者),参与事务发起者的事务

事务协调者(gts-manage),协调分布式事务的提交,回滚等



一、客户端配置

1、注解说明

GtsTransaction 该注解为分布式事务的切面(AOP point),如果业务方的service服务需要参与分布式事务,则需要加上此注解

//事务发起方超时时间 long clientTransTimeout() default 3000L;

//事务参与方超时时间 long serviceTransTimeout() default 3000L;

//请求超时时间 long socketTimeout() default 3000L;

2、spring配置

属性描述必填默认值备注
namesrvAddr注册中心地址 ip:port暂时不支持多个
instanceName客户端实例名DEFAULT
pollNameServerInterval从注册服务拉取manage服务地址1000 * 30 ms
heartbeatBrokerInterval向manage服务发送心跳频率1000 * 30 ms
timeoutMillis客户端请求超时时间3000 ms
clientOnewaySemaphoreValue单向请求流量控制65535请求数量
clientAsyncSemaphoreValue异步请求流量控制65535请求数量
channelNotActiveInterval检查连接是否关闭1000 * 60 ms
clientChannelMaxIdleTimeSeconds客户端连接最大空闲时间120s
clientSocketSndBufSize发送缓冲区6553564k
clientSocketRcvBufSize接收缓冲区6553564k
clientCloseSocketIfTimeout客户端超时是否关闭连接false

3、引入依赖

参见example样例工程,样例工程分为三个,可用于参考测试使用

二、manage服务部署

1、配置参数

属性描述必填默认值备注
namesrvAddr注册中心地址 ip:port;ip:port多个用逗号分隔
manageNamemanage实例名
manageIdmanage标识1支持主备模式ha, 配置为 1:主 , 否则为备
registerBrokerTimeoutMills注册manage地址向nameserver的请求超时时间6000 ms
defaultThreadPoolNums默认线程池数量
clientManageThreadPoolNums客户端连接管理的线程池数量
clientManagerThreadPoolQueueCapacity客户端连接管理的线程池队列数量

netty.server:

属性描述必填默认值备注
listenPort注册中心端口
serverWorkerThreads工作线程数量4
serverCallbackExecutorThreads执行回调方法的线程数量4
serverSelectorThreadssocket io线程数3
serverOnewaySemaphoreValue单向请求流量控制256请求数量
serverAsyncSemaphoreValue异步请求流量控制64请求数量
serverChannelMaxIdleTimeSeconds连接最大空闲时间120s
serverSocketSndBufSize发送缓存区6553564k
serverSocketRcvBufSize接收缓存区6553564k
serverPooledByteBufAllocatorEnableBUFFER分配方式true
useEpollNativeSelectorio方式是否使用epoll模式false

netty.client

属性描述必填默认值备注
clientWorkerThreads工作线程数量4
clientCallbackExecutorThreads执行回调方法的线程数量cpu数量
clientOnewaySemaphoreValue单向请求流量控制65535请求数量
clientAsyncSemaphoreValue异步请求流量控制65535请求数量
channelNotActiveInterval检查连接是否关闭1000 * 60 ms
clientChannelMaxIdleTimeSeconds客户端连接最大空闲时间120s
clientSocketSndBufSize发送缓冲区6553564k
clientSocketRcvBufSize接收缓冲区6553564k
connectTimeoutMillis客户端超时是否关闭连接false

2、部署命令

下载代码打包

nohup java -jar 应用 > /dev/null 2>&1 &

目前可以启动两个实例,一个主一个从,manageId来区分

三、nameserver服务部署

1、参数配置

属性描述必填默认值备注
listenPort注册中心端口
serverWorkerThreads工作线程数量4
serverCallbackExecutorThreads执行回调方法的线程数量4
serverSelectorThreadssocket io线程数3
serverOnewaySemaphoreValue单向请求流量控制256请求数量
serverAsyncSemaphoreValue异步请求流量控制64请求数量
serverChannelMaxIdleTimeSeconds连接最大空闲时间120 s
serverSocketSndBufSize发送缓存区6553564k
serverSocketRcvBufSize接收缓存区6553564k
serverPooledByteBufAllocatorEnableBUFFER分配方式true
useEpollNativeSelectorio方式false

2、部署命令

下载代码打包

nohup java -jar 应用 > /dev/null 2>&1 &

可以启动多个实例

四、测试场景

可以保证一致性的场景:

场景描述预期
A服务-->B服务并且A服务-->C服务 A抛出异常整个事务组回滚
A服务-->B服务并且A服务-->C服务B或者C抛出异常给A服务整个事务组回滚
A服务-->B服务并且A服务-->C服务A超时整个事务组回滚

可能造成不一致的场景:

场景描述预期
A服务-->B服务并且A服务-->C服务 B或C服务查询事务状态或者提交事务报错本地事务回滚
A服务-->B服务并且A服务-->C服务B等待事务指令超时,C等待事务指令不超时B回滚,C正常提交
A服务-->B服务并且A服务-->C服务B等待事务指令不超时,C等待事务指令超时B正常提交,C回滚
A服务-->B服务并且A服务-->C服务B等待事务指令超时,C等待事务指令超时B回滚,C回滚



转载于:https://juejin.im/post/5abb029af265da239e4e1f00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值