繁体   English   中英

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

[英]Apache Camel how to add/remove endpoints dynamically from a route

我试图熟悉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. (灵活性)能够从您的应用程序动态添加/删除服务器
  2. (扩展)能够处理大量此类服务器

让我们忘记#2并关注“灵活性”部分。

所以问题是,我想:

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

到目前为止,我认为:

首先,我承认我对集成模式不是很熟悉,但是只是扫描目录,唯一可以满足要求的就是Content Enricher 它可以传递消息,然后转到其他地方然后带走其他东西。 所以我在想,如果有人添加ftp服务器,则连接详细信息可以封装在消息中,然后Content Enricher可以连接到该ftp服务器并获取文件并通过路由将其进一步推送...。一个能够连接到多个ftp服务器的Content Enricher 首先,我不认为这是该模式背后的意图,其次,由于Camel中有ftp 组件 ,因此我应该可以在这种情况下使用它

第二种方法是像使用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似乎是可行的( 在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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM