博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LCN5.0重连问题
阅读量:6349 次
发布时间:2019-06-22

本文共 2780 字,大约阅读时间需要 9 分钟。

最近把lcn4.0版本更新到5.0版本后,出现一个问题:

LCN4.0版本在客户端启动时如果找不到tx-manager,默认会一直重试,但更新到5.0版本后默认只会重试8次,并且无法设置无限重试。

这样就限制了客户端要在tx-manager之前启动,并且如果lcn没有集群,并且挂了的话,启动lcn后还得把客户端都重启一遍,个人觉得这样不好。

官方目前还没有优化这个功能,本人只能通过修改部分源码先凑合着用,期待官方尽早优化!

 

相信各位也都下载了tx-lcn,如果不下载修改txlcn-tm里面的数据库配置和redis配置,估计也没法用,下面是修改的代码:

1、在txlcn-txmsg-netty模块下找到NettyRpcClientInitializer.connect(),下面只贴出修改后的代码:

@Override    public synchronized Optional
connect(SocketAddress socketAddress) { //原代码,lcn通过配置reconnectCount来设置重试次数,而这个重试次数就是由这个for循环去使用 //for (int i = 0; i < rpcConfig.getReconnectCount(); i++) { //下面两行是修改后的代码, int i = 0; while (!rpcConfig.isReconnectLimit() || (rpcConfig.isReconnectLimit() && i < rpcConfig.getReconnectCount())){ if (SocketManager.getInstance().noConnect(socketAddress)) { try { //修改后的代码,将i+1改为++i log.info("Try connect socket({}) - count {}", socketAddress, ++i); Bootstrap b = new Bootstrap(); b.group(workerGroup); b.channel(NioSocketChannel.class); b.option(ChannelOption.SO_KEEPALIVE, true); b.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000); b.handler(nettyRpcClientChannelInitializer); return Optional.of(b.connect(socketAddress).syncUninterruptibly()); } catch (Exception e) { log.warn("Connect socket({}) fail. {}ms latter try again.", socketAddress, rpcConfig.getReconnectDelay()); try { Thread.sleep(rpcConfig.getReconnectDelay()); } catch (InterruptedException e1) { e1.printStackTrace(); } continue; } } // 忽略已连接的连接 return Optional.empty(); } log.warn("Finally, netty connection fail , socket is {}", socketAddress); clientInitCallBack.connectFail(socketAddress.toString()); return Optional.empty(); }

 

2、在txlcn-txmsg模块下找到RpcConfig类,只贴出修改后的代码

@NoArgsConstructor@Datapublic class RpcConfig {    /**     * 最大等待时间 (ms)     */    private long waitTime = -1;    /**     * 最大缓存锁的数量     */    private int cacheSize = 1024;    /**     * appName 参数延迟删除时间(ms)     */    private long attrDelayTime = -1;    /**     * 断线重连次数     */    private int reconnectCount = 8;    /**     * 重连延迟时间(ms)     */    private long reconnectDelay = 6000;    /**     * 是否限制断线重连次数     */    private boolean reconnectLimit = false;}

RpcConfig类就是配置重试属性的类,原RpcConfig中没有reconnectLimit属性,这个属性是自己加的,就是用于配置重连次数限制

加上这个属性之后,可以在引用了tx-lcn的模块上配置这个属性,例:

tx-lcn.message.netty.reconnect-limit=false

转载于:https://www.cnblogs.com/jagerLan/p/10606115.html

你可能感兴趣的文章
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
查看>>
雨巷-戴望舒
查看>>
OpenCms创建网站过程图解——献给OpenCms的初学者们
查看>>
C++ 异常处理机制的实现
查看>>
Freebsd的ports命令
查看>>
分布式系统---幂等性设计
查看>>
【转】时钟周期,机器周期,指令周期的区别
查看>>
MYSQL 更新时间自己主动同步与创建时间默认值共存问题
查看>>
android 屏幕适配
查看>>
Android Activity的4种启动模式
查看>>
leetcode第一刷_Minimum Depth of Binary Tree
查看>>
pm2-webshell —— 基于浏览器的终端控制台
查看>>
Mysql基准测试
查看>>
Session 撰改演示
查看>>
【转】python3 发邮件实例(包括:文本、html、图片、附件、SSL、群邮件)
查看>>
事务隔离级别(图文详解)
查看>>
canvas系列教程08-canvas各种坑
查看>>
浅析package.json中的devdependencies 和 dependencies
查看>>
又一个 iOS 侧边栏组件: SideMenu
查看>>
Python每日一练0019
查看>>