以下是伪代码

方法一

前后代码省略
//绑定服务器,该实例将提供有关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. go基础-依赖管理

    有些不可思议,简洁.优雅的go语言依赖管理如此混乱,发布多年也没有可靠的依赖管理机制,官方先后推出了多种依赖管理机制gopath.vendor.dep等,没有一个顺手,直到在Go 1.11推出go m ...

  2. Spring Boot 关闭 Actuator ,满足安全工具扫描

    应用被安全工具,扫描出漏洞信息 [MSS]SpringBoot Actuator敏感接口未授权访问漏洞(Actuator)事件发现通告: 发现时间:2023-11-25 19:47:17 攻击时间:2 ...

  3. Django的staticfiles库

    staticfiles 库是 Django 提供的一个用于管理静态文件的库,它提供了一些工具和函数来帮助开发者在 Django 应用程序中管理和提供静态文件服务. 在 Django 应用程序中,静态文 ...

  4. H5自适应

    一.设置html的font-size,使用rem作为单位 假设设计稿宽度750px,屏幕宽高750px, 1.1rem=屏幕宽度/设计稿宽度*100px,适合用px表示宽度 1rem=100px re ...

  5. MongoDB的聚合笔记

    1,聚合 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg(). 常用的表达式如上图. 1.1,aggregate  语法 语法:     db.集合名称.aggregat ...

  6. macOS 苹果电脑双面打印单面打印PDF设置

    苹果的打印服务分为两个部分,一个是应用层另一个是系统层. 其中双面打印或单面打印统一在系统层面设置,下面我分别截图示意wps pdf和福昕pdf两款软件设置双面打印. 1.WPS PDF 在完成方式中 ...

  7. 浅谈 Socket.D 与响应式编程

    一.Socket.D 的主要特性 首先,Scoket.D 是高效一个二进制的网络通讯协议(官方我讲法是:基于事件和语义消息流的网络应用协议),能够满足很多场景下使用.其次,Scoket.D 是温和的响 ...

  8. 创建定义store并使用组合式api、选项式api

    在项目根目录创建store文件夹(此步骤和vuex相同) 在步骤一的store文件夹下根据不同的用途场景创建单独的store文件(等同于vuex中分模块). 定义store基本步骤 步骤 导入defi ...

  9. 安卓app填写域名和端口后点击保存没有反应(填错注册信息)

    解决方法:域名填写错误导致(仔细检查填写的域名和端口是否正常,注册的信息是否与填写的一致) ​ 域名是:3q9l302537.wicp.vip 中间有个字母 l 不是数字 1 填写成了:3q91302 ...

  10. python 解析网址信息

    python 解析网址信息 本篇文章主要讲述python 中如何解析一个url的信息. 1: requests获取网页信息 #!/usr/bin/python3 # -*- coding: UTF-8 ...