Apache Camel - 在每条路由之前执行进程

时间:2015-11-30 05:39:55

标签: apache-camel

以下是我创建的路线 -

from("jetty:http://localhost:8181/abc").routeId("abc").choice()
            // Authenticate the request
            .when(authenticator).endChoice()
            // Authorize the request
            .when(authorizer).endChoice()
            // Validate the request
            .when(abcValidator).endChoice()
            .otherwise()
            .process(abcRequestProcessor).process(storeFeatureRequestDetails).process(featureRequestApproverUpdater).split(body()).process(abcApproverMailer).to("direct:toMail");

上述路由功能正常,但我不想在每条路由中添加身份验证器和授权程序步骤。有没有办法让我们可以配置它们在每条路线之前运行。

我尝试了以下内容 -

from("jetty:http://localhost:8181/*").process(new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
            System.out.println("Triggered");
        }
    });

但它寻找完全匹配。

2 个答案:

答案 0 :(得分:2)

您可以使用Camel interceptor API ...

!(x < K)

答案 1 :(得分:0)

如果您不想将AAA放在每一条路线中,为什么不提取其功能并将它们放在不同的路线中并在路线中呼叫它们?示例代码:

from("jetty:http://localhost:8181/abc").routeId("abc").choice()
            // Authenticate the request
            .to("direct:authenticator")
            // Authorize the request
            .to("direct:authorizer")
            // Validate the request
            .to("direct:abcValidator")            
            .process(abcRequestProcessor).process(storeFeatureRequestDetails).process(featureRequestApproverUpdater).split(body()).process(abcApproverMailer).to("direct:toMail");

基本上,验证者现在处于单独的路线中。您可以通过&#34; direct:authenticator&#34;来调用它。授权和验证也是如此。

这样,如果您有其他需要使用此功能的路由,您只需调用AAA路由。