首页 > 解决方案 > 如何在 apache camel DSL 中从端点动态返回

问题描述

这是我的代码

            from("google-pubsub:123:subscription1?maxMessagesPerPoll=3 & concurrentConsumers=5" ).routeId("myroute")
            .process(new ProducerProcessor())
        to("google-pubsub:123:topic1")
            ;

在我上面的代码中,我想让它成为通用的 from 通道。基本上它应该能够使用来自 good-pubsub 的数据,或者可能来自文件或 JMS 队列。因此,取决于我想要返回不同的参数来自频道。如下所示

private RouteDefinition fromChannel(String parameter) {
        if (parameter is "google" then
            return  from("google-pubsub:123:subscription1?maxMessagesPerPoll=3 & concurrentConsumers=5" )


        if (parameter is "file" then
           return   from(/my/fileFolder/)).split(body().tokenize("\n")).streaming().parallelProcessing();



    }

我试过这个,但我在 fromChannel 方法中得到空指针异常。如果你有更好的想法,请告诉我。

标签: apache-camel

解决方案


根据评论重写

例如,您可以为每种输入类型创建(静态)模板路由,并根据配置的端点列表生成路由。

我在这个答案中描述了这样一个端点配置和路由生成场景。

像这样,您可以为每个文件路由生成拆分部分,并为其他路由类型生成任何其他专业。

所有这些输入路由都在其末端路由到公共处理路由

.from(pubsubEndpoint)
    .to("direct:genericProcessingRoute")

.from(fileEndpoint)
    .split(body()
    .tokenize("\n"))
    .streaming()
    .parallelProcessing()
    .to("direct:genericProcessingRoute")

.from("direct:genericProcessingRoute")
    ... [generic processing]
    .to("google-pubsub:123:topic1")

围绕公共核心路由的多个输入(和输出)路由称为六边形架构,Camel 非常适合此架构。


推荐阅读