我正在运行Camel Spring OSGI应用程序。 Camel上下文通过Spring初始化。 当捆绑停止时,我需要做一些清理活动,比如取消注册消息监听器。我怎么做?有可以覆盖的方法吗?我知道OSGI包必须提供激活器启动和停止方法,但我的理解是Camel / Spring / OSGI框架会覆盖这些方法。
我的beanx.xml:
<beans>
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="outboundBuilder" />
</camelContext>
</beans>
我的java代码:
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
.....
}
}
答案 0 :(得分:3)
只是为了扩大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>
答案 1 :(得分:2)
您可以使用Camel Route policy并在路线即将停止或从上下文中删除时将代码写入清理资源。