以下是伪代码

方法一

前后代码省略
//绑定服务器,该实例将提供有关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. 脚踏esbuild祥云,胸怀tsx利刃,身披scss羽衣,追寻前端的本质

    本文所有内容,纯属个人观点,无意与任何人争论 前端技术的现状 我觉得前端技术发展到现在有两个最主要的特征 前端工具链为前端工程化提供了强有力的支持 这方面主要是webpack.rollup.esbui ...

  2. 6k Star!B站、滴滴、小红书都在用的网站防火墙

    你有网站么?你担心网站被黑客攻击么?你知道如何抵御来自黑客的攻击吗? 据称互联网上有 30% 的流量都来自于恶意攻击.做过 Web 开发或者有过建站经验的朋友对 SQL 注入.CC 攻击.XSS.We ...

  3. Linux配置静态IP解决无法访问网络问题

    Linux系统安装成功之后只是单机无网络状态,我们需要配置Linux静态IP来确保服务器可以正常连接互联网 1.首先安装ifconfig Centos7安装成功后,高版本会把ping命令给移除了,所以 ...

  4. MODBUS转PROFINET网关TS-180 网关连接西门子 PLC 和工业称重仪表

    随着科技的高速发展,工业自动化行业对日益多样的称重需求越来越高,上海某公司在国内的一个 工业自动化项目中,监控中心系统需要远程实时采集工业称重仪表测量的各种称重参数.该系统使用的是 西门子 S7-30 ...

  5. 【Javaweb】JavaEE项目的三层架构 | 快速搭建

    逻辑类图 分层的目的是为了解耦.解耦就是为了降低代码的耦合度.方便项目后期的维护和升级. 不同的层有不同的包 web层 com.stguigu.web/servlet/controller servi ...

  6. Android学习day01【搭建Android Studio】

    是Google开发的操作系统 Android开发是移动应用开发的表现形式之一 还有很多的开发形式,就不一一列举了 完整项目精简的开发流程 开发工具 Android studio(强烈建议) Andro ...

  7. centos虚拟机安装

    目录 一.准备工作 1.vmware workstation软件安装 2.准备ios镜像 二.创建Centos虚拟机 三.进行Centos7的系统安装 四.虚拟机快照的使用 1.创建虚拟机快照 2.还 ...

  8. force语句

    类似于assign,用于调试,可以强制给赋值,放在initial后,可以穿透到最内部模块. force (强制赋值操作)与 release(取消强制赋值)表示第二类过程连续赋值语句. 使用方法和效果, ...

  9. Ubuntu 22.04 LTS 安装lnmp

    Ubuntu 22.04 LTS 安装最新稳定版本nginx.mysql5.7和php7.2 全部apt-get安装,就是快,迅速.前提是需要在有网络环境的情况下哈!! 操作系统版本:Ubuntu 2 ...

  10. 【C#】【Equals和ReferenceEquals】关于对象和值的问题

    在学习C#中的记录类型时,对出现的Equals和ReferenceEquals得到的不同结果表示不理解,随即进行相关资料查找. 值类型 == : 比较两者的"内容"是否相同,即&q ...