How about register a Vertx thread clean up task in the event bus?

Then we just need to trigger the Event after close.

And the user can do some extension it by adding event handler which listens
to the close event.


Willem Jiang

Blog: http://willemjiang.blogspot.com (English)
          http://jnn.iteye.com  (Chinese)
Twitter: willemjiang
Weibo: 姜宁willem

On Tue, May 8, 2018 at 4:27 PM, 郑扬勇 <yangyong.zh...@qq.com> wrote:

> Yes, mechanism based on spring had existed, and I had use these code to
> make Gracefully Shutdown work :
>
>         ... start up event code
>     } else if (event instanceof ContextClosedEvent) {
>       LOGGER.warn("cse is closing now...");
>       triggerEvent(EventType.BEFORE_CLOSE);
>
>        //1.Unregister microservice instance from Service Center
>       //it contains eventBus.post(new ShutdownEvent());I think we may move
> out from it
>       RegistryUtils.destroy();
>
>        //2.Stop all network transport threads
>       for (String vertx : VertxUtils.getVertxMap().keySet().toArray(new
> String[0])) {
>         VertxUtils.getVertxMap().get(vertx).close();
>         VertxUtils.getVertxMap().remove(vertx);
>       }
>
>        //3.Close ApplicationContext
>       if (applicationContext instanceof AbstractApplicationContext) {
>         ((AbstractApplicationContext) applicationContext).close();
>       }
>
>        //4.Raise an ShutdownEvent in EventBus in order to notify
> components do clean works
>        //eventBus.post(new ShutdownEvent());
>
>        triggerEvent(EventType.AFTER_CLOSE);
>       isInit = false;
>     }
>
>
>  And I think we can use EventBus listening ShutdownEvent rather than only
> use SPI, may even simpler ?
>
>  Best Regards!
>  YangYongZheng
>
>   ------------------ 原始邮件 ------------------
>   发件人: "wjm wjm"<zzz...@gmail.com>;
>  发送时间: 2018年5月8日(星期二) 下午3:50
>  收件人: "dev"<dev@servicecomb.apache.org>;
>
>  主题: Re: [Discussion]What Java Chassis need to do for support Gracefully
> Shutdown
>
>
>
> we already have this mechanism, but listener depend on spring bean.
> so we can improve it:
> 1.allow listener registered by SPI
> 2.modules should register listener to do their clean up works
> 3.clean up maybe must ordered, so listener add getOrder method.
>
> 2018-05-08 14:56 GMT+08:00 Willem Jiang <willem.ji...@gmail.com>:
>
> > My suggestion is register a shutdown callback (to do 1,2,4) in the
> > ApplicationContext.
> > In this way we can do some clean up work with or without Spring.
> >
> >
> > Willem Jiang
> >
> > Blog: http://willemjiang.blogspot.com (English)
> >           http://jnn.iteye.com  (Chinese)
> > Twitter: willemjiang
> > Weibo: 姜宁willem
> >
> > On Tue, May 8, 2018 at 2:53 PM, 郑扬勇 <yangyong.zh...@qq.com> wrote:
> >
> > > Hi All:
> > >    In order to let Java Chassis support Gracefully Shutdown, I think
> need
> > > to do these works :
> > >    1.Unregister microservice instance from Service Center(clean service
> > > registry).
> > >    2.Stop all network transport threads (vertx eventloop-threads)(to
> > > prevent blocking exit).
> > >    3.Close ClassPathXmlApplicationContext created in BeanUtils.init()
> and
> > > release all resources and locks.
> > >    4.Raise an ShutdownEvent in EventBus.
> > >
> > >    Also if user directly call `System.exit(0)` , all these works will
> > done
> > > and jvm can terminate with `Process finished with exit code 0`.
> > >
> > >    What's missing or any suggestions are welcome !
> > >
> > >  Best Regards!
> > >  YangYongZheng
> >
>

Reply via email to