복붙노트

[SPRING] Camel, Spring, OSGI : 중지 방법을 지정하는 방법이 있습니까?

SPRING

Camel, Spring, OSGI : 중지 방법을 지정하는 방법이 있습니까?

Camel Spring OSGI 응용 프로그램을 실행하고 있습니다. Camel 컨텍스트는 Spring을 통해 초기화된다. 번들이 멈 추면 메시지 청취자 등록 취소와 같은 정리 작업을 수행해야합니다. 어떻게해야합니까? 재정의 할 수있는 방법이 있습니까? 나는 OSGI 번들이 activator의 시작과 중지 방법을 제공해야한다는 것을 이해하지만 Camel / Spring / OSGI 프레임 워크가 이러한 메소드를 오버라이드한다는 것도 이해한다.

내 beanx.xml :

<beans>
  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="outboundBuilder" />
  </camelContext>
</beans>

내 자바 코드 :

public class MyRouteBuilder extends RouteBuilder {
    public void configure() {
           .....
    }
}

해결법

  1. ==============================

    1.올바른 Bilgin Ibryam의 대답을 조금 더 확장하십시오.

    올바른 Bilgin Ibryam의 대답을 조금 더 확장하십시오.

    Camel은 경로에 정책을 적용 할 수 있습니다. 이 정책은 런타임에 경로를 제어합니다. 이렇게하면 경로 수명 시간의 특정 이벤트에서 사용자 지정 논리를 수행 할 수 있습니다.

    경로 정책 구현.

    RoutePolicySupport를 확장하고 관심있는 메소드를 오버라이드하는 새로운 클래스를 선언하는 것은 간단합니다.

    public class MyRoutePolicy extends RoutePolicySupport{
    
        @Override
            public void onStart(Route route) {
            // TODO Auto-generated method stub
            super.onStart(route);
        } 
    
        @Override
        public void onStop(Route route) {
            // TODO Auto-generated method stub
            super.onStop(route);
        }
    
        @Override
        public void onExchangeBegin(Route route, Exchange exchange) {
            // TODO Auto-generated method stub
            super.onExchangeBegin(route, exchange);
        }
    
    
    }
    

    이제 routebuilder configure () 메소드에서 다음과 같이 경로를 사용하십시오.

     RoutePolicy policy = new MyRoutePolicy();
     from("timer://blah")
       .routeId("Test1").routePolicy(policy)
       .setBody().constant("A Message Like Hello World")
       .to("mock:meh");
    

    방금 경로가있는 Spring XML을 사용했다면 다음을 추가하십시오 :

    <bean id="policy" class="MyRoutePolicy"/>
    
    
    <camelContext xmlns="http://camel.apache.org/schema/spring">
       <route id="foo" routePolicyRef="MyRoutePolicy">
         <from uri="timer://blah"/>
         <setBody><constant>A Message Like Hello World</constant></setBody>        
         <to uri="mock:meh"/>
       </route>
     </camelContext>
    
  2. ==============================

    2.Camel Route 정책을 사용하여 경로가 중단되거나 문맥에서 제거 될 때 정리 리소스에 코드를 작성할 수 있습니다.

    Camel Route 정책을 사용하여 경로가 중단되거나 문맥에서 제거 될 때 정리 리소스에 코드를 작성할 수 있습니다.

  3. from https://stackoverflow.com/questions/23809040/camel-spring-osgi-is-there-a-way-to-specify-the-stop-method by cc-by-sa and MIT license