首页 文章

Apache Camel - 从处理器内发出HTTP请求

提问于
浏览
0

这里有一个类似但更普遍的问题:Business logic in Camel processors vs service endpoints .

现在考虑以下流程(E1和E2代表处理器,它们不是像camel流程中的 endpoints ),我用参数(p,q)触发:

Route: E1 -> E2

E1本身发出带参数(p,q)的HTTP请求,接收响应数据d(sync)并将其转发给E2,E2继续根据(p,q,d)进行处理 . 因此它实质上丰富了额外数据的输入 .

被调用的 endpoints 包含要集成的数据,即,这将不会改变,并且将来不需要配置 .

我尝试了两种解决方案,这两种解决方案对我来说都是错误的:

  • 使用 http4:url endpoints 并在消息头中搭载(p,q)(或者交换的属性) .

  • 使用显式/编程发出http请求的处理器,处理响应并转发预期的(p,q,d) . 为方便起见,我使用 producerTemplate 发送到camel-context内的 http4:url .

第一个问题是它增加了许多样板处理器等,并使实际路线真的模糊不清 . 第二种方法允许将处理卸载到新类中(而不是将其混合到路由中),但仍然需要camel-context并依赖于此 .

对此有何建议?除了更多抽象的陈述,如“不要将业务逻辑与布线混合”等,我找不到任何东西 .

*** added real use-case ***

E1获取两个日期(时间 Span )和部门名称,获取指定时间段内指定部门中的所有名称 . 然后(在上面我忽略了这个细节),名称被分割,并且对于每个名称,所有数据都被提取,这些数据已经保存在指定的日期范围内 . 对于最后一步,需要输入第一步的日期(因此这些日期需要通过整个路径) .

谢谢,马库斯

1 回答

  • 0

    感谢克劳斯:

    无论如何,您可以丰富信息 . 骆驼并不在乎 . 如果你使用处理器/ pojo它只是java代码,你可以做任何你想要的 . 如果你使用enrich / pollEnrich DSL,那么他们使用AggregationStrategy“合并”浓缩 .

    我通过http4:url endpoints 的结果丰富了路由的原始输入 . 通过这种方式,我可以将数据的“获取”与实际业务逻辑分开,后者现在发生在独立于其余(特别是骆驼)的Processor / AggregationStreategy bean中 .

    谢谢马库斯

相关问题