【问题标题】:Camel mid-route jpa consumer骆驼中途jpa消费者
【发布时间】:2013-06-03 17:22:36
【问题描述】:

我在使用 JPA 时遇到了以下问题,但这可能更像是关于 Camel 的概念性问题。

我需要一个基于 cron 的 Quartz 消费者。但如果它被触发,我想选择 JPA 组件作为第一步。

<from uri="quartz://myQuartz?cron=myCronExpression/>
<to uri="jpa://home.myEntity?consumer.query=select o from home.myEntity o"/>

但是如果我用“to”来调用 JPA 组件,那么它将被用作生产者,而不是消费者。我是否可以使用 JPA 组件来处理这个问题,或者我必须遵循服务激活器(基于 bean)的逻辑并留下 JPA 组件?

提前致谢, 格格利

【问题讨论】:

  • 我无法遵循这个。与您所写的相反-在您的示例中,Quartz 端点是生产者; JPA 端点是消费者。对吗?
  • 这是误导... Quartz 产生一个 Exchange,是的,但是 - 据我所知 - 在 Camel 术语中,“来自”端点被称为消费者,“到”端点被称为生产者。所以消费者轮询/等待消息,而生产者发送它们。在这里, - 如果我是对的 - JPA 组件认为我想保留我的 Exchange 主体。我想以某种方式告诉他,“请运行查询并返回结果”。
  • 你是对的 ;-)。但是在阅读manning.com/ibsen/Camel_ch01_update.pdf 时,术语可能会有些混乱。但回到你的问题:你能不能解释一下你想要达到的目标。您需要以特定间隔运行 JPA 查询吗?然后将查询结果发送到另一个端点?我现在只是在猜测 - 但听起来你应该看看 camel.apache.org/aggregator2.html 吗?

标签: jpa apache-camel quartz-scheduler


【解决方案1】:

这几乎就是Content-Enrichement 模式。您可以使用

<pollEnrich uri="jpa://home.myEntity?consumer.query=select o from home.myEntity o"/>

改为使用消费者中间路线。请记住,您不能使用路由中的运行时数据(标头等),但在这种情况下需要保持路由 URI 静态。似乎您的 URI 是静态的,所以应该没问题。

【讨论】:

  • 前段时间我有类似的要求,我在两者之间使用了处理器来完成这项工作。那时从不知道内容丰富器可以用于此.. 很好的解决方案!
  • 非常感谢。我觉得它有一个模式。我找到了丰富的模式,但不知何故我忽略了这个 pollEnrich 能力。 :) 再次感谢您!
【解决方案2】:

皮特说得很好。我有一个类似的问题。我想创建一个简单的路由,当调用它时将从数据库中检索数据。解决方案很简单。

from("direct:test")
.pollEnrich("jpa://" + User.class.getName() + "?consumer.query=select u from test.User u&consumeDelete=false")

也可以查看Camel - content enricher: enrich() vs pollEnrich()

【讨论】:

    猜你喜欢
    • 2015-08-27
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    相关资源
    最近更新 更多