我是骆驼的新手,并试图在apache camel中理解UoW的概念。任何人都可以对此有所了解吗?
答案 0 :(得分:1)
下面的场景可以帮助我理解什么是工作单元。
如果您使用:
onException(..)
.useOriginalMessage()
..
在您的配置中,交换的工作单元将包含原始正文,并且在发生异常的情况下,原始消息将发送到死信队列。
但是,如果您随后在路由中使用.split()
,则如下所示:
.from(..)
.split()
.body()
.to("mock:b")
..
然后将为拆分的每个部分创建一个新的工作单元,可能使用不同的主体(取决于拆分的内容)。如果发生例外,新工作单元中的正文将被发送到死信队列,而不是原始队列。您必须期望它是原始的,因为您指定了.useOriginalMessage()
,但这不会发生。要获得预期的行为,请将.shareUnitOfWork()
添加到您的路线中,如下所示:
.from(..)
.split()
.body()
.shareUnitOfWork()
.to("mock:b")
..
现在进入死信队列的每条失败消息都是原始消息。
答案 1 :(得分:0)
从Camel 2.14开始,onCompletion已被修改为支持以同步或异步模式(使用线程池)运行完成任务,以及是否在路由使用者完成之前或之后运行。原因是提供更多的灵活性。例如,指定在路由使用者完成之前运行同步,这允许在使用者将任何响应写回被调用者之前修改交换。您可以使用它来添加客户标头,或发送到日志以记录响应消息等。
以下是指向它的链接:
答案 2 :(得分:-2)
表示处理“交换”的工作单元的对象,允许使用同步挂钩。此对象可能与JPA或Spring中的事务一对一映射,也可能不映射。