我想访问在驼峰路线中添加到交换机的所有同步。
原因是当发生特定类型的异常时,我想将消息路由到错误处理组件,并让错误处理组件执行这些同步的“onCompletion”,即使存在异常。 / p>
使用
添加同步exchange.getUnitofWork().addSynchronization(new MySyncAdapter());
我试图用
访问它们exchange.handoverCompletions();
但是,我认为我必须做错事,因为无论我尝试从哪个组件(我的实际组件或错误组件)获取完成,列表都为空。
编辑:
根据他的回答,这应该有效:
exchange.addOnCompletion(new MySyncAdapter());
List<Synchronization> syncs = exchange.handoverCompletions();
但是,同步仍为空。有什么建议吗?
答案 0 :(得分:2)
在这种情况下,Exchange没有完成/同步,当您调用exchange.handoverCompletions()
时,UnitOfWork实例会这样做,您将获得null。您也无权访问UnitOfWork中的同步,因为它正在另一个线程中处理。任何修改它们的尝试都会导致并发异常。
实际上,您正试图以某种意图使用某种方式。应该通过调用here概述的例外条款DSL来处理交换错误。它旨在通过允许开发人员定义异常类型并将Exchange转发到路由以供错误处理组件进一步处理,以细粒度的方式捕获交换错误。
最诚挚的问候, Scott ES