我想访问在骆驼路线中添加到交易所的所有同步。
这样做的原因是,当发生特定类型的异常时,我希望将消息路由到错误处理组件,并让该错误处理组件即使存在异常也执行那些同步的“ onCompletion”。
通过使用添加同步
exchange.getUnitofWork().addSynchronization(new MySyncAdapter());
我试图通过
exchange.handoverCompletions();
但是,我认为我一定做错了,因为无论我尝试从哪个组件(我的真实组件或错误组件)获取补全,列表都是空的。
编辑:
根据他在下面的回答,这应该起作用:
exchange.addOnCompletion(new MySyncAdapter());
List<Synchronization> syncs = exchange.handoverCompletions();
但是,同步仍然为空。有什么建议么?
最佳答案
在这种情况下,Exchange没有完成/同步,UnitOfWork实例会这样做,当您调用exchange.handoverCompletions()
时,您将获得一个null。您也无权访问UnitOfWork中的同步,因为它是在其他线程中处理的。任何尝试修改它们的操作(handoverCompletion所做的操作)都会导致并发异常。
实际上,您正在尝试以非预期的方式使用某些东西。交换错误应通过调用here中概述的异常条款DSL处理。通过允许开发人员定义Exception类型并将Exchange转发到路由以供您的错误处理组件进行进一步处理,它可以细粒度地捕获交换错误。
最好的祝福,
斯科特ES