从失败的Camel Exchange访问同步

时间:2012-06-05 22:26:58

标签: java activemq apache-camel

我想访问在驼峰路线中添加到交换机的所有同步。

原因是当发生特定类型的异常时,我想将消息路由到错误处理组件,并让错误处理组件执行这些同步的“onCompletion”,即使存在异常。 / p>

使用

添加同步
exchange.getUnitofWork().addSynchronization(new MySyncAdapter());

我试图用

访问它们
exchange.handoverCompletions();

但是,我认为我必须做错事,因为无论我尝试从哪个组件(我的实际组件或错误组件)获取完成,列表都为空。

编辑:

根据他的回答,这应该有效:

exchange.addOnCompletion(new MySyncAdapter());
List<Synchronization> syncs = exchange.handoverCompletions();

但是,同步仍为空。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,Exchange没有完成/同步,当您调用exchange.handoverCompletions()时,UnitOfWork实例会这样做,您将获得null。您也无权访问UnitOfWork中的同步,因为它正在另一个线程中处理。任何修改它们的尝试都会导致并发异常。

实际上,您正试图以某种意图使用某种方式。应该通过调用here概述的例外条款DSL来处理交换错误。它旨在通过允许开发人员定义异常类型并将Exchange转发到路由以供错误处理组件进一步处理,以细粒度的方式捕获交换错误。

最诚挚的问候, Scott ES