【问题标题】:Is it possible to start a camel endpoint within process()是否可以在 process() 中启动骆驼端点
【发布时间】:2017-05-04 13:21:11
【问题描述】:

正如标题所说:是否可以在路由(-builder)的流程功能中启动骆驼端点?我是 apache camel 的新手,但已经做过一些项目。

情况如下: 我将 apache camel 与 Siemens Teamcenter RAC 结合使用来执行 SavedQuery。结果是带有找到的元素的 ModelObject[]。

对于这些元素中的每一个,我现在需要启动另一个端点来执行第二个搜索查询。我想到了类似的东西:

//within .process()
for (ModelObject ob : arrModelObjects) {
    // something like:  .to("direct:searchnew")
}

但我不能在处理器中引用外部函数“.to()”。是否有解决方法或解决方案,或者我想错了?

【问题讨论】:

  • 看看ProducerTemplate
  • 或Content Enricher,如果您需要进行第二次查询并将结果包含在您的模型对象中
  • 需要将每个对象“发送”到端点,所以我首先查看生产者模板。内容丰富器似乎是错误的方式

标签: java apache apache-camel


【解决方案1】:

正如@Rathna 所说,您可以使用 producerTemplate。

您可以从您的上下文创建一个新的生产者模板,您可以从您的交换中获取如下:

public class MyProcessor implements Processor{

@Override
public void process(Exchange exchange) throws Exception {
    ProducerTemplate producerTemplate = exchange.getContext().createProducerTemplate();

    ModelObject[] arrModelObjects = (ModelObject[]) exchange.getIn().getBody();

    for (ModelObject ob : arrModelObjects) {
        producerTemplate.sendBody("direct:someEndpoint", ob);
    }
}

}

【讨论】:

    【解决方案2】:
       class MyProcessor implements Processor{
    
        private ProducerTemplate producerTemplate;
          @Override
          public void process(Exchange exchange) throws Exception {
             for (ModelObject ob : arrModelObjects) {
                   producerTemplate.send("direct:searchnew",exchange);    
           }}
        }
    

    将 producerTemplate 添加到 CamelContext。

    【讨论】:

    • 在你的配置中添加它作为
    • 我没有使用骆驼上下文,我有一个 java 主类,我在其中运行 org.apache.camel.main.Main 类
    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2013-02-10
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多