gpt4 book ai didi

java - Apache Camel 如何从路由动态添加/删除端点

转载 作者:行者123 更新时间:2023-11-30 02:36:15 24 4
gpt4 key购买 nike

我正在尝试熟悉 EIP 和 Apache Camel,并且我有一个用例,但我不太确定如何使用 Camel 来表达或实现

用例:

假设您设计了一个集成解决方案,该解决方案从 ftp 获取文件,进行一些处理并将其上传到队列。您选择 Apache Camel 来实现此解决方案,并且 Java DSL 中的路线如下所示:

 from("ftp://user@hostname/directoryname")
.process(new Processor() {
public void process(Exchange exchange) throws Exception
{
//my fantastic prosessing goes here
}
}).to("jms:queue:queueName");

路线可能比这复杂得多,但这并不重要。想象一下,您的解决方案取得了如此巨大的成功,以至于有计划实现一项服务,任何人都可以添加他的 ftp 服务器并处理文件并将其上传到队列。所以你想要的是

  1. (灵 active )能够在您的应用中动态添加/删除服务器
  2. (扩展)能够处理可能大量的此类服务器

让我们忘记#2,专注于灵 active 部分。

所以我想问题是:

如何动态(在运行时)向 Apache Camel 路由添加/删除端点?

到目前为止我考虑的是:

首先,我承认我对集成模式不太熟悉,但只要浏览一下目录,唯一符合要求的就是内容丰富器。它可以接受一条消息,然后去其他地方并带来其他东西。所以我在想,如果有人添加一个 ftp 服务器,连接详细信息可以封装在消息中,然后内容丰富器可以连接到该 ftp 服务器并获取文件并通过路由进一步推送它。 .. 所以它实际上是一个能够连接到多个 ftp 服务器的内容丰富器......这听起来是错误的。首先,我不认为这是该模式背后的意图,其次,由于 Camel 中有 ftp Component,我应该能够在该场景中使用它

第二种方法是将路由分成两部分,就像使用 vm 组件一样,如下所示:

 from("ftp://user@hostname/directoryname").to("vm:internalQ");
from("vm:internalQ")
.process(new Processor() {
public void process(Exchange exchange) throws Exception
{
//my fantastic prosessing goes here
}
}).to("jms:queue:queueName");

现在,我可以使用 ftp 端点创建许多路由,这些端点写入该内部队列,以便可以拾取它。动态添加路由到CamelContext似乎是可能的( Add camel route at runtime in Java )。这是要走的路吗?或者我只是想以一种并非设计目的的方式使用Camel

最佳答案

您可以动态添加路由到您的CamelContext :

MyRouteBuilder trb = new MyRouteBuilder(servletEndpoint, mockEndpoint);
camelContext.addRoutes(trb);

和 MyRouteBuilder:

MyRouteBuilder(Endpoint servletEndpointStart, MockEndpoint mockEndpointEnd, String allowedParameters){
this._servletEndpoint = servletEndpointStart;
this._mockEndpoint = mockEndpointEnd;
}

@Override
public void configure() throws Exception {
from(this._servletEndpoint)
.id(TESTING_ROUTE_NAME)
.process(new Processor(){ // some processor })
.to(_mockEndpoint);
}

你也可以修改路由,但是你需要重新启动它,才能正常工作,查看它是如何完成的: org.apache.camel.model.RouteDefinition.adviceWith(ModelCamelContext, RouteBuilder)

关于java - Apache Camel 如何从路由动态添加/删除端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42999274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com