你好:
我们在使用Dubbo框架进行优雅停机时,需要自定义一部分停机逻辑,一般情况此部分逻辑需放到Dubbo框架停机前,我们在实际使用过程中遇到如下问题。
方案1:应用自定义java停机hook,由于java多个hook之间无序执行,无法保证在dubbo框架停机前执行我们的逻辑;
方案2:因为dubbo在spring容器中优雅停机是注册了spring的事件(ApplicationListener),我们也通过注册spring的事件执行应用测停机逻辑。现在问题是多个ApplicationListener是无序的(本质是ApplicationListener的order是默认最大)。
我们建议dubbo框架注册Spring事件监听使用可排序的SmartApplicationListener,并初始化order,例如20?
* Dubbo version: 2.5.x-2.7.x
---------源程序-------------
/**
* SpringExtensionFactory
*/
private static class ShutdownHookListener implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ContextClosedEvent) {
DubboShutdownHook shutdownHook =
DubboShutdownHook.getDubboShutdownHook();
shutdownHook.doDestroy();
}
}
}
---------建议修改为如下-------------
private static class ShutdownHookListener implements
SmartApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ContextClosedEvent) {
DubboShutdownHook shutdownHook =
DubboShutdownHook.getDubboShutdownHook();
shutdownHook.doDestroy();
}
}
@Override
public int getOrder() {
// TODO Auto-generated method stub
return 20;
}
@Override
public boolean supportsEventType(Class<? extends ApplicationEvent>
eventType) {
// TODO Auto-generated method stub
return eventType == ContextClosedEvent.class;
}
@Override
public boolean supportsSourceType(Class<?> arg0) {
// TODO Auto-generated method stub
return true;
}
}
[ Full content available at: https://github.com/apache/dubbo/issues/5784 ]
This message was relayed via gitbox.apache.org for
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]