2017-10-10 125 views
0

我有駱駝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莫名其妙或什麼?

回答

1

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

0

解決辦法是:

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()方法期間被調用。