apache camel Unit Of Work是什么意思?

时间:2015-10-15 04:53:48

标签: apache-camel

我是骆驼的新手,并试图在apache camel中理解UoW的概念。任何人都可以对此有所了解吗?

3 个答案:

答案 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已被修改为支持以同步或异步模式(使用线程池)运行完成任务,以及是否在路由使用者完成之前或之后运行。原因是提供更多的灵活性。例如,指定在路由使用者完成之前运行同步,这允许在使用者将任何响应写回被调用者之前修改交换。您可以使用它来添加客户标头,或发送到日志以记录响应消息等。

以下是指向它的链接:

Apache Camel UoW

答案 2 :(得分:-2)

表示处理“交换”的工作单元的对象,允许使用同步挂钩。此对象可能与JPA或Spring中的事务一对一映射,也可能不映射。