当前位置: 首页 > 知识库问答 >
问题:

Apache Camel-动态构建endpoint和endpoint

夏侯宏旷
2023-03-14
from("activemq:queue:process" ).routeId("activemq_processqueue")
        .process(exchange -> {
            SomeImpl impl = new SomeImpl();
            impl.process(exchange);
        })
        .to(ExchangePattern.InOnly, "activemq:queue:upload");

impl.process中,我正在填充ID目标服务器路径。现在,我需要定义一个新的路由,它使用来自上传队列的消息,并复制一个本地文件夹(基于在上一个路由中生成的Id),并将其上传到目标文件夹,该文件夹是一个ftp服务器(这也在上一个路由中填充)

那么,如何设计一条新的路线,其中从和到终点都是动态的,如下所示?

from("activemq:queue:upload" )
        .from("file:basePath/"+{idFromExchangeObject})
    .to("ftp:"+{serverIpFromExchangeObject}+"/"+{pathFromExchangeObject});

共有1个答案

上官扬
2023-03-14

对于您的情况,我认为有一个更好的替代方案,假设您使用的是比2.16更新的骆驼版本(以前的版本有替代方案,但更复杂,看起来不优雅-(例如consumerTemplate和recipientList))。

您可以用pollEnrich替换第一个“dynamic From”,它使用轮询使用者和简单的表达式构建动态文件endpoint来丰富消息。对于第二部分,如前所述,一个动态uri.tod将完成这项工作。所以您的路线如下所示:

 from("activemq:queue:upload" )
    .pollEnrich().simple("file:basePath/${header.idFromExchangeObject})
    .aggregationStrategy(new ExampleAggregationStrategy()) // * see explanation 
    .timeout(2000) // the timeout is optional but recommended
    .toD("ftp:${header.serverIpFromExchangeObject}/${header.pathFromExchangeObject}") 

>

  • 请参见content enricher部分“使用动态URI”http://camel.apache.org/content-enricher.html。

  •  类似资料:
    • 这个问题的主要原因如下。我正在动态填充,但什么都没有发生。

    • 我试图找出一种方法,如何将endpoint锚动态添加到jsPlumb容器中。 我希望源endpoint位于左侧,目标endpoint仅位于右侧。 问题是,我无法找到任何方法来做到这一点,而不是像我现在这样求助于一些黑客。 jsPlumb支持连续锚,但单个锚的位置将根据连接器之间的方向和连续锚的数量重新计算。这意味着源endpoint和目标endpoint可以共享容器的同一侧,这是我希望避免的。 这

    • 问题内容: 我正在构建一个Rails应用程序,并且我想通过AJAX将Rails部分中的内容放入模式中。 在Twitter Bootstrap 2.3.2模式中,我阅读了文档,您可以使用远程密钥通过ajax加载内容。 http://getbootstrap.com/2.3.2/javascript.html#modals 但是,这仅允许将内容注入,而不是动态构建整个模式。 有没有办法用JS动态构建整

    • 我是JavaFx新手,尝试用三个StackPane构建下面的屏幕,可以根据窗口大小动态地增加和缩小宽度和高度。我尝试了不同的方法,但没能做到这一点。我还尝试使用锚烷约束。这是我试图实现的图像和相应的FXML。以下是我在这些窗格之间寻找的约束条件 左窗格具有最大宽度(300px)和最小150 左右之间的距离(2)堆栈窗格应保持不变 右顶部和底部堆栈窗格之间的距离应保持不变 左顶部堆栈窗格的最大高度为

    • 我正在尝试向异步路由发送消息,但它不起作用。我刚刚在github上创建了一个项目来模拟这个问题