组合[弹簧] DefaultShutdownStrategy的,[骆驼] ShutdownAware和[骆驼处理器不工作

问题描述:

我有骆驼Processor其开始ThreadProcessor实现弹簧ShutdownAware 当我发送TERM信号(正常关闭)到应用我没有收到任何有关以下信息 - 从ShutdownAware接口被调用的任何方法。 我提到过关于Thread,因为我想正确地阻止它。组合[弹簧] DefaultShutdownStrategy的,[骆驼] ShutdownAware和[骆驼处理器不工作

import org.apache.camel.Processor; 
import org.apache.camel.spi.ShutdownAware; 

public class MyProcessor implements Processor, ShutdownAware { 
... 
} 

我应该注册这个Processor | ShutdownAware莫名其妙或什么?

ShutdownAware是一个骆驼接口,而不是Spring。

如果MyProcessor是一个Spring bean,然后它可以实现DisposableBean,或有@PreDestroy方法,或用一些春天理解当上下文被关闭调用另有注解。

如果你使用XML,你可能会如果你使用@Bean也许

@Bean(destroyMethod = "shutdown") 
public MyProcessor myProcessor() { ... } 

当然MyProcessor都需要一个shutdown方法做到这一点

<bean class="...MyProcessor" destroy-method="shutdown"/> 

; ShutdownAware似乎没有什么合适的。

如何创建Spring上下文?也许你需要注册关机钩,例如:context.registerShutdownHook();查看Javadoc

真的,处理这个问题的方法是让CamelContext知道Spring正在关闭。那应该通知你的处理器。

+0

是的我们可以在你的Processor类中扩展'ServiceSupport'或实现'Service',然后Camel将调用'doStart' /'doStop'方法作为启动/停止生命周期的一部分。详情请参阅:http://camel.apache.org/lifecycle –

+0

感谢您的回答。 那么什么是'ShutdownAware' /如何使用它? – THM

+0

'ShutdownAware'的javadoc表示这主要是为内存中的消费者提供一个机会来确保其关闭期间的挂起交换不会丢失。请参阅https://camel.apache.org/maven/camel-2.15.0/camel-core/apidocs/org/apache/camel/spi/ShutdownAware.html – ptomli

解决办法是:

import org.apache.camel.Processor; 
import org.apache.camel.Service; 
import org.apache.camel.spi.ShutdownAware; 

public class MyProcessor implements Processor, ShutdownAware, Service { 
... 
} 

然后从ShutdownAware方法将关闭甚至start()中,不使用从“服务”接口stop()方法期间被调用。