2

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

这样做的原因是,当发生特定类型的异常时,我想将消息路由到错误处理组件,并让该错误处理组件执行这些同步的“onCompletion”,即使出现异常也是如此。

通过使用添加同步

exchange.getUnitofWork().addSynchronization(new MySyncAdapter());

我试图访问它们

exchange.handoverCompletions();

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

编辑:

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

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

但是,syncs 仍然为空。有什么建议么?

4

1 回答 1

2

在这种情况下,Exchange 没有 Completions/Synchronizations,UnitOfWork 实例在您调用时会这样做,exchange.handoverCompletions()您将得到一个空值。您也无权访问 UnitOfWork 中的同步,因为它是在不同的线程中处理的。任何修改它们的尝试,这就是 handoverCompletion 所做的,都会导致并发异常。

实际上,您正试图以非预期的方式使用某些东西。应通过调用此处概述的异常子句 DSL 来处理交换错误。它旨在通过允许开发人员定义异常类型并将 Exchange 转发到路由以供错误处理组件进一步处理,从而以细粒度的方式捕获交换错误。

最好的问候,斯科特 ES

于 2012-06-06T16:27:00.873 回答