• z.l
    2019-11-21
    老师,那生产环境怎么关闭netty服务?

    作者回复: 估计这个关闭复杂的你都怀疑关闭有那么简单么?问的我不禁回头翻了下dubbo/hadoop和做过的项目的代码了,还好都是下面2句话:
    bossGroup.shutdownGracefully();
    workerGroup.shutdownGracefully();
    所以放心使用吧!

    
     2
  • 飞翔
    2019-11-22
    老师 一直不懂tasks 里边到底装的什么task, 正常客户发送的请求 不算task吧 那什么会放在taskqueue中呢

    作者回复: 给你举2个例子啊:
    1 比如请求刚建立的时候,那个建立的请求,不是要register么,例如注册读事件?那个register就是一个task。
    2 你的业务如果不独立出一个线程池来处理,你不就复用IO线程了么?那你的业务处理这个事情就封装成task了
    3 其他所有的handler,类似第二点,只要和io复用在一起,那就成一个task来执行了。所以才有了io和普通的task的比例ioratio一说。

    
     1
  • Allen
    2019-11-10
    老师真好

    作者回复: 谢谢肯定,就是普通话不标准......

    
     1
  • InfoQ_fbb8f3b4ab40
    2020-02-03
    生产环境的netty服务是要配合Runtime.getRuntime().addShutdownHook()使用吗?关闭的时候只能ctrl+c这样?
    
    
  • 小奶狗
    2019-12-14
    老师,生产环境关闭要设计得优雅点,用jdk自带的ShutdownHook,适合不?还有用注册信号量Signal,适合不?

    作者回复: 这个问题本身和netty没有关系,讨论的是java程序的优美关闭问题了。这
    两个一般都是放一起用的,信号是为了触发你来关,hook是让关闭的时候别忘记清理,所以一般都是配合,所以可以置换成别的方式,比如假设你是http服务器,你可以不用信号量而直接用http api调用来触发关闭,例如jennkins:
    http://<jenkins.server>/safeExit

    
    
  • 小奶狗
    2019-12-13
    我们生产环境直接ctrl + c,这个优美关闭估计没用吧?

    作者回复: 只能说太狠了,😂

    
    
  • 粘豆包
    2019-11-28
    始于迷惘,终于更好层次的迷惘!😂
    
    
  • 飞翔
    2019-11-22
    老师 在shutdowngraceflly 会先关闭所有的channel 那这个时候有一个channel对应的nioeventloop 还在处理 还没有把结果写回这个channel 那么 那么发送这个请求的客户就永远收不到这个请求的处理结果了是吧

    作者回复: 是的,channel关闭了,这块逻辑也挺乱的,而且经过几次改变,连维护者的那些人也迷糊的很,大体思路就是不保证所有请求了,不然时间无法保证,当然也会尽量。所以不要依赖它的行为,而是指望客户端自己去重试什么的。

    
    
  • 飞翔
    2019-11-22
    话说什么情况下我们会关闭netty呢, 我觉得大部分情况 我们服务启动起来 我们希望他一直接受处理请求 因此 大部分情况 我们是永远不调用shutdowngracefully 对吧

    作者回复: 你服务要上新版本的时候,或者你的软硬件升级的时候,比如升级os,升级更好的机器,你都需要重启的对不对?重启,自然想优美点,不能直接拔插座吧,哈哈,所以肯定想着优美关闭的。

    
    
  • witluo
    2019-11-19
    始于迷茫,终于更高层次的迷茫;或者应该说,进化到更高层次的迷茫,因为虽然迷茫,但是还要不停的追。断断续续研究netty快一年了,感谢老师带来了不同观点的源码解读。

    作者回复: 谢谢,感觉有的时候在“泡”代码感觉,过一段时间看看,然后又能多理解一些细节,哈哈

    
    
  • 谨守
    2019-11-18
    始于迷茫,终于更高级的迷茫。哈哈哈,直指程序员的终极本质~

    作者回复: 是的,现在我还是迷惘的,哈哈,不过好在,我发现netty的那些创始人也不是都懂,一起阿Q了一下。

    
    
  • 王莹
    2019-11-09
    关于平静周期(quiet period)的分析,请指教
    1. cancelScheduledTasks(),ScheduledTask能取消的话执行取消
    2. runAllTasks(),ScheduledTask能执行的也执行了
    即Netty内核产生的调度任务都在EventLoop最后的生命消散过程中被处理掉了,
    但是对于业务系统而言,还有用户扩展(自定义异步业务处理层,自定义Handler扩展等),他们均可以通过execute调用,提交额外的调度任务,这些调度任务对于内核来说,需要给予一定时间的观察时间,即平静周期(quiet period),如有这样的调度任务发生执行,就再次观察一段时间。在生命的最后阶段,岁月静好,不必那么劳心劳力了,睡100毫秒起来再来观察就好,,,
    展开

    作者回复: 读了三遍你的表述,没有觉得你哪里说的不对,和我理解差不多。哈哈

    
    
我们在线,来聊聊吧