以下是伪代码

方法一

前后代码省略
//绑定服务器,该实例将提供有关IO操作的结果或状态的信息
ChannelFuture channelFuture = bootstrap.bind();
this.serverChannel = channelFuture.channel(); //给cf 注册监听器,监控我们关心的事件
channelFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
if (future.isSuccess()) {
logger.info("在" + future.channel().localAddress() + "上开启监听 成功");
Instance nacos = nacosUtil.registerInstance();
} else {
logger.info("在" + future.channel().localAddress() + "上开启监听 失败");
}
}
});

方法二

ChannelFuture f = bootstrap.connect();
f.addListener(connectedListener); private GenericFutureListener<ChannelFuture> connectedListener = (ChannelFuture f) ->
{
final EventLoop eventLoop = f.channel().eventLoop();
if (!f.isSuccess()) {
logger.info("连接失败!在10s之后准备尝试重连! doConnect => {}:{}", host, port);
eventLoop.schedule(() -> this.doConnect(), 10, TimeUnit.SECONDS);
} else {
connectFlag = true;
channel = f.channel();
channel.closeFuture().addListener(closeListener); logger.info("连接成功: localAddress => {} remoteAddress => {}", f.channel().localAddress(), f.channel().remoteAddress());
}
};

方法三

//绑定服务器,该实例将提供有关IO操作的结果或状态的信息
ChannelFuture channelFuture = bootstrap.connect(nettyHost, nettyPort);//.sync()去掉,不然就走不到下一行 ListennerClientReconnHeart 加不进去
channelFuture.addListener(applicationContext.getBean(NettyClientReconnHeart.class)); @Component
public class NettyClientReconnHeart implements ChannelFutureListener { private final Logger logger = LoggerFactory.getLogger(LoggerConfig.NETTY_LOGGER); @Autowired
private NettyClient nettyClient; @Override
public void operationComplete(ChannelFuture channelFuture) throws Exception {
if (!channelFuture.isSuccess()) {
EventLoop loop = channelFuture.channel().eventLoop();
logger.warn("客户端已启动,与服务端建立连接失败,10s之后尝试重连!");
loop.schedule(() -> nettyClient.doConnect(), 10, TimeUnit.SECONDS);
} else {
logger.info("服务器连接成功");
}
}
}

Netty ChannelFuture 监听三种方法的更多相关文章

  1. extjs 事件监听 三种方式

    xtype : 'textarea', name : 'dataSetField', labelSeparator:'', fieldLabel:'', hideLabel: true, allowB ...

  2. Android监听点击事件实现的三种方法

    监听点击事件实现的三种方法:1.匿名内部类2.外部类3.直接实现接口 1.匿名内部类: package com.jereh.calculator; import android.content.Con ...

  3. JavaScript监听页面可见性(焦点)同时改变title的三种方法

    JavaScript监听页面可见性(焦点)同时改变title的三种方法 本文参考了https://developer.mozilla.org/zh-CN/docs/Web/API/Page_Visib ...

  4. Netty事件监听和处理(上)

    陪产假结束了,今天又开始正常上班了,正好赶上米粉节活动,又要忙上一阵了,米粉节活动时间为4.03 - 4.10,有不少优惠,感兴趣的可以关注mi.com或小米商城app. 今天给大家送了福利:小爱音箱 ...

  5. (转)Java结束线程的三种方法

    背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程 ...

  6. React组件绑定this的三种方法

    我们在使用React组件时,调用方法常常用到this和event对象,默认情况是不会绑定到组件上的,需要特殊处理. 节点上使用bind绑定 特点:该方法会在每次渲染组件时都会重新绑定一次,消耗一定的性 ...

  7. Java结束线程的三种方法(爱奇艺面试)

    线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...

  8. 服务器编程入门(13) Linux套接字设置超时的三种方法

    摘要:     本文介绍在套接字的I/O操作上设置超时的三种方法. 图片可能有点宽,看不到的童鞋可以点击图片查看完整图片.. 1 调用alarm 使用SIGALRM为connect设置超时 设置方法: ...

  9. 解决移动端浏览器 HTML 音频不能自动播放的三种方法

    https://blog.csdn.net/PY0312/article/details/90349386 由于Android,IOS移动端的浏览器以及微信自带的浏览器为了用户更好的体验,规定不自动播 ...

  10. Eclipse远程调试Java代码的三种方法

    Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...

随机推荐

  1. iptables中limit 和 limit-burst 说明

    Limit match    这个匹配操作必须由-m limit明确指定才能使用.有了他的帮助,就能对指定的规则的日志数量加以限制,以免你被信息的洪流淹没哦.比如,你能事先设定一个限定值,当符合条件的 ...

  2. Tomcat国内安装及乱码解决详细步骤(无f墙)

    1.下载安装包 链接:https://pan.baidu.com/s/1x_hWMnUrui4aDYo9UE-GdA?pwd=p8kn 提取码:p8kn --来自百度网盘超级会员V4的分享 2.一键下 ...

  3. Mysql不同数据库之间表结构同步

    开发环境的Mysql表结构做了修改,要同步到其他环境数据库中使用数据库管理工具JookDB的表结构同步功能就很方便.虽然Navicat也有这个功能但是有免费的当然是用免费的. 用JookDB添加数据库 ...

  4. 【笔记整理】requests使用代理

    使用proxies参数传递代理信息 import requests if __name__ == '__main__': proxies = { # 这个字典的key不可以乱写,必须是http和htt ...

  5. Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析

    学习基础知识 掌握 Go 语言的常见概念,如变量.循环.条件语句.函数.数据类型等等.深入了解 Go 基础知识的好起点是查阅 Go 官方文档 文章链接:Go 编程语言详解:用途.特性.与 Python ...

  6. 安装华企盾DSC防泄密软件:编辑文件不加密常见问题,运维工程师必看

    1.先查看客户端日志主进程是否是加密进程.日志中是不是勾选智能半透明.加密类型是否有添加 2.用procmon监控保存的文件找出writefile的进程是否有添加,进程树是否有父进程,加密类型是否正确 ...

  7. 【scikit-learn基础】--『监督学习』之 岭回归

    岭回归(Ridge Regression)是一种用于处理共线性数据的线性回归改进方法.和上一篇用基于最小二乘法的线性回归相比,它通过放弃最小二乘的无偏性,以损失部分信息.降低精度为代价来获得更实际和可 ...

  8. NetSuite 开发日记:解决导入 CSV 与 Excel 文件时中文乱码问题

    Backgroud 在使用SheetJS库导入带有中文的CSV文件时,中文被解析为了乱码 Analysis 乱码肯定是编码问题 确定CSV的编码,可使用VS Code.记事本来查看 修改CSV文件编码 ...

  9. ThreadLocal底层源码解析

    ThreadLocal底层源码解析 ThreadLocal:顾名思义的意思是本地线程或者局部线程的意思,其真正含义是希望多个线程之间拥有自己的局部变量,多个线程间拥有自己的私人变量,在多线程间不被共享 ...

  10. idea2020.1.3汉化包报错问题

    已解决:idea2020.1.3汉化包报错问题 问题描述:插件市场提供的版本不对.不兼容,所以需要手动下载安装 这里附上文件 https://wwsi.lanzouq.com/b03czdtwf 密码 ...