Java 切换Camel中的窃听队列

Java 切换Camel中的窃听队列,java,apache-camel,Java,Apache Camel,目前,我正在使用choice()来确定是否打开了窃听队列的切换。有没有更好的方法可以用骆驼来做呢 这是我的代码: package routes; import org.apache.camel.builder.RouteBuilder; public class MyRoute extends RouteBuilder{ private String inQueue; private String outQueue; private String wiretapQ

目前,我正在使用
choice()
来确定是否打开了窃听队列的切换。有没有更好的方法可以用骆驼来做呢

这是我的代码:

package routes;

import org.apache.camel.builder.RouteBuilder;

public class MyRoute extends RouteBuilder{


    private String inQueue;
    private String outQueue;
    private String wiretapQueue;
    private Boolean shouldWiretap;

    @Override
    public void configure(){

        from(inQueue)
                .choice()
                    .when(constant(shouldWiretap))
                        .wireTap(wiretapQueue)
                    .end()
                .end()
                .to(outQueue);
    }

    public void setInQueue(String inQueue) {
        this.inQueue = inQueue;
    }

    public void setOutQueue(String outQueue) {
        this.outQueue = outQueue;
    }

    public void setWiretapQueue(String wiretapQueue) {
        this.wiretapQueue = wiretapQueue;
    }

    public void setShouldWiretap(boolean shouldWiretap) {
        this.shouldWiretap = shouldWiretap;
    }
}
我还编写了一个简单的测试:

package routes;

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;


public class MyRouteTest extends CamelTestSupport {


    protected RouteBuilder[] createRouteBuilders() throws Exception {
        MyRoute route= new MyRoute();
        route.setInQueue("direct:in");
        route.setOutQueue("mock:out");
        route.setWiretapQueue("mock:wiretap");
        route.setShouldWiretap(false);
        return new RouteBuilder[] {route};
    }

    @Test
    public void testRouteWithoutWiretap() throws InterruptedException {
        template.sendBody("direct:in", "test");

        MockEndpoint mockOut = getMockEndpoint("mock:out");
        mockOut.expectedMessageCount(1);
        mockOut.assertIsSatisfied();

        MockEndpoint mockWiretap = getMockEndpoint("mock:wiretap");
        mockWiretap.expectedMessageCount(0);
        mockWiretap.assertIsSatisfied();
    }
}
很难说什么是“更好的方式”。它可以做得更短,以确保使用

例如:


首先,谢谢大家。在这种情况下,当souldWiretp标志为false时,消息不会进入out队列。很抱歉出现错误,当然需要双端。请看我最后一次编辑
public class MyRouteTest extends CamelTestSupport {

    @Test
    public void test() throws InterruptedException {
        template.sendBody("direct:in", "testBody");

        MockEndpoint wiretapEndpoint = getMockEndpoint("mock:wiretap");
        wiretapEndpoint.expectedMessageCount(0);
        wiretapEndpoint.assertIsSatisfied();

        MockEndpoint outEndpoint = getMockEndpoint("mock:out");
        outEndpoint.expectedMessageCount(1);
        outEndpoint.assertIsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() {
        return new RouteBuilder() {

            boolean shouldWireTap = false;

            @Override
            public void configure() {
                from("direct:in")
                    .filter().constant(shouldWireTap)
                        .wireTap("mock:wiretap").end()
                    .end()
                .to("mock:out");
            }
        };
    }
}