从失败的骆驼交换访问同步



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

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

同步是使用

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

我试图访问它们

exchange.handoverCompletions();

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

编辑:

根据下面的答案,这应该有效:

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

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

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

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

此致敬意斯科特·

最新更新