2017-10-10 5 views
0

に動作しません。私は私がアプリケーションにTERM信号(グレースフルシャットダウン)を送信すると、このProcessorは春ShutdownAware を実装Thread を開始しているラクダProcessorを持っていますどんな情報も受け取らない - ShutdownAwareインターフェイスのメソッドが呼び出された。 私はそれを正しく停止したいので、Threadについて言及しました。組み合わせは、[キャメル] ShutdownAwareと[キャメル]プロセッサは

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

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

どうすればこのプロセッサを登録する必要がありますか?

答えて

1

ShutdownAwareは、SpringではなくCamelインターフェイスです。

MyProcessorの場合は、Spring Beanが、それはDisposableBeanを実装、または@PreDestroy方法を持っている、またはその他の春は、コンテキストがシャットダウンしているときに呼び出す理解する何かで注釈を付けることができます。

あなたはXMLを使用している場合は、おそらくもちろんMyProcessor

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

shutdown方法が必要になります@Beanを使用している場合、あなたはこの

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

を行う可能性があります。 ShutdownAwareには何も表示されません。

Springコンテキストはどのように作成されますか?おそらくあなたは、例えば、シャットダウンフックを登録する必要があります。context.registerShutdownHook();本当に、これに対処する方法はCamelContextは春がシャットダウンされていることを意識することですJavadoc

を参照してください。それはあなたのプロセッサーに通知する必要があります。

+0

はい、私たちはあなたの 'Processor'クラスで' ServiceSupport'を拡張したり 'Service'を実装したりして、起動/停止時にライフサイクルの一環として' 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()方法が使用されていません。