Apache Camel:如何基于旧版本或 header 重建 url

Apache Camel: How to rebuild the url based on the old one or the header

我在 camel 上使用路由来启动服务器,该服务器用作请求的访问点、re-directions、数据库网关等。 我想将获取请求重定向到另一台服务器中的另一项服务,并根据请求组成 url。我制作了一个处理器,它获取 header 并放入新的 url。但是新的 url 没有被执行...

代码如下:

CamelContext context = new DefaultCamelContext();

ConnectionFactory connectionFactory =
    new ActiveMQConnectionFactory("vm://localhost?create=false");
context.addComponent("activemq", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
context.start();

Processor Redir = new RedirectProcess();
from("jetty:http://localhost:8080/Middleware")   
    .choice()
    .when(header("redir")).process(Redir)
    .end()

和处理器

public class RedirectProcess implements Processor {
    String value = null;
    String Head;

    public void process(Exchange inExchange) throws Exception {
        Head = inExchange.getIn().getHeader("redir").toString();
        CamelContext camelContext = new DefaultCamelContext();
        camelContext.addRoutes(route());
        camelContext.start();
        ProducerTemplate template = camelContext.createProducerTemplate();
        template.sendBody("direct:start", "Hello Camel");
        System.out.println(Head);
    }

    public RouteBuilder route() {
        return new RouteBuilder() {
            public void configure() {
                // you can configure the route rule with Java DSL here
                System.out.println("Passed HERE!");
                from("direct:start")
                    .to("http://localhost:8081/FunctLayer/tool/start/tool/" + Head + "");
            }
        };
    }
}

这样不行。不要尝试在运行时创建上下文或路由。使用收件人列表模式 (http://camel.apache.org/recipient-list.html).

您的代码如下所示:

    CamelContext context = new DefaultCamelContext();

    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?create=false");
                    context.addComponent("activemq",JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));

    context.start();
from("jetty:http://localhost:8080/Middleware")   
    .choice()
        .when(header("redir"))
            .recipientList(simple("http://localhost:8081/FunctLayer/tool/start/tool/${header.redir}"))
        .end()