首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camel工作单元

Camel工作单元
EN

Stack Overflow用户
提问于 2018-07-17 07:12:58
回答 2查看 1.7K关注 0票数 1

我正在尝试理解Camel中的工作单元概念。我有一个简单的问题,希望这里有人能帮上忙。

如果在路由Excachange时涉及多个路由,例如

代码语言:javascript
复制
from("aws-sqs:Q1").to("direct:processMe");//route1

from("direct:processMe").to("direct:aws-post");//route2

from("direct:aws-post").to("htt4:myservice");//route3

是否在每个路由的末尾调用工作单元?或者只在route3的末尾?在我的示例中,一旦route1完成,SQS消息会从SQS中删除吗?或者它会等到我的消息到达"myservice"?

谢谢。

跟进:

我稍微修改了一下路线:

代码语言:javascript
复制
from("aws-sqs:Q1").to("direct:processMe");//route1

from("direct:processMe").process(
   new Processor(){
       public void process(Exchange exchange) throws Exception {
          throw new RuntimeException("fail on purpose");
       }
   }
).to("direct:aws-post");//route2

from("direct:aws-post").to("http4:myservice");//route3

其思想流程是这样的:如果在每个路由的末尾调用工作单元,那么一旦从SQS队列中读取消息,它将被SQS组件确认为已读。另一方面,如果仅在Exchange完成通过所有路由的路由之后才调用工作单元,则路由2中的异常将导致消息不被确认,并在可见性期限到期后可用于重新传递。

测试表明,尽管消息被第一路由读取,但消息仍保留在Q上。它被一次又一次地拾取(直到它以死信Q结尾)。因此,我坚信单位边界是由被路由的Exchange的末端定义的。

EN

回答 2

Stack Overflow用户

发布于 2018-07-17 07:26:34

unit of work基本上就是一个事务。

默认情况下,路由( camel Exchange)的消息在单个UnitOfWork上下文中运行。

在您的示例中,设置了3个UnitOfWork,从每个from开始,到每个路由的最终to结束。

我希望来自SQS的消息在第一个路由完成后被使用。为了进行测试,您可以添加一个睡眠,以允许您检查队列。

代码语言:javascript
复制
from("direct:processMe").process(new Processor() 
        { void process() {  try  { Thread.sleep(60000L) } catch (Exception e) { } } 
    }).to("direct:aws-post")

如果您希望消息保留在队列中,直到myservice获得消息,那么您需要将处理放在单个路由中。

票数 0
EN

Stack Overflow用户

发布于 2018-09-12 05:08:19

我找到了关于工作单元边界的一个很好的解释:

“OnCompletion DSL名称用于定义当一个工作单元完成时将发生的操作。

工作单元是一个包含整个交换的骆驼概念。请参阅第43.1节,“交换”。onCompletion命令具有以下功能:

  • OnCompletion命令的作用域可以是全局的,也可以是每条路由的。路由作用域覆盖全局作用域。OnCompletion可以配置为在失败时成功触发。
  • onWhen谓词只能用于在某些情况下触发onCompletion。您可以定义是否使用线程池,但缺省值是无线程池。“

在SQS处理的情况下,使用者在交换上定义onCompletion。因此,只有在交换完成路由之后才会调用它。

完整的答案可以在这里找到:Apache Camel Development Guide2.11. OnCompletion

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51371202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档