2017-10-10 2 views
0

작동하지 않는다 어떤 정보도받지 못했습니다. ShutdownAware 인터페이스의 메소드가 호출되었습니다. 정확하게 멈추고 싶기 때문에 Thread에 관해 언급했습니다.조합 [낙타] ShutdownAware 및 [낙] 프로세서 내가 애플리케이션 I에 <code>TERM</code> 신호 (정상 종료)를 보낼 때 스프링 <code>ShutdownAware</code> 구현 <code>Thread</code> 이 <code>Processor</code>을 시작 낙 <code>Processor</code>이

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

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

어떻게 든이 프로세서를 등록해야합니까? ShutdownAware 어떻게 든 또는 무엇을해야합니까?

답변

1

ShutdownAware은 봄이 아닌 낙타 인터페이스입니다.

MyProcessor이 스프링 빈인 경우 을 구현하거나 @PreDestroy 메서드를 구현하거나 컨텍스트가 종료 될 때 Spring이 호출 할 수있는 것으로 주석을 달았습니다.

당신은 XML을 사용하는 경우 당신은 아마도 물론 MyProcessor

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

shutdown 방법이 필요합니다 @Bean를 사용하는 경우,이

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

을 할 수있다; ShutdownAware의 내용은 적합하지 않은 것처럼 보입니다.

스프링 컨텍스트가 어떻게 생성됩니까? 아마도 다음과 같은 종료 훅을 등록 할 필요가 있습니다 : context.registerShutdownHook();Javadoc

정말 대처 방법은 CamelContext에서 스프링이 종료되었음을 인식하도록하는 것입니다. 그러면 프로세서에 알려야합니다.

+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() 방법이 사용되지 않습니다 종료시 호출됩니다.

관련 문제