Camel, Spring, OSGI: Is there a way to specify the stop method?

前端 未结 2 1731
误落风尘
误落风尘 2020-12-20 03:45

I\'m running a Camel Spring OSGI application. The Camel context is initialized through Spring. When the bundle stops, I need to do some clean-up activities, like de-register

相关标签:
2条回答
  • 2020-12-20 03:53

    Just to expand a little on the answer of Bilgin Ibryam which is correct.

    Camel has the ability to apply a policy to a route. This Policy controls routes at runtime. This will allow you to do custom logic at certain events of the route life time.

    Implementing a route policy.

    It is rather simple declare a new class which extends RoutePolicySupport then override the methods you are interested in.

    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);
        }
    
    
    }
    

    Now use the route in your routebuilder configure() method like this:

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

    If you were just using a Spring XML with a route then add the following:

    <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>
    
    0 讨论(0)
  • 2020-12-20 03:56

    You can use Camel Route policy and write your code to cleanup resource when the route is about to stop or be removed from the context.

    0 讨论(0)
提交回复
热议问题