我的Apache Camel处理器无法正常工作

时间:2015-04-15 21:38:13

标签: java apache-camel

我正在尝试使用名为Apache Camel的{​​{1}}接口,但遇到了一些困难。我希望将1)的消息发送到JBoss Fuse应用服务器中的ActiveMQ队列,2)由Camel处理器处理,然后3)发送到源代码中指定的其他队列。现在发生的是主打印中的SOP语句和Logging上的一些错误消息,但没有任何内容从程序发送到队列。

这是我的代码:

Processor

这是当前的输出:

在MyOwnProcessor.java中启动main方法

SLF4J:无法加载类" org.slf4j.impl.StaticLoggerBinder"。 SLF4J:默认为无操作(NOP)记录器实现 SLF4J:有关详细信息,请参阅http://www.slf4j.org/codes.html#StaticLoggerBinder

主要完成。

2 个答案:

答案 0 :(得分:1)

试试这个,

public static void main(String args[]) throws Exception {
    // create CamelContext
    CamelContext context = new DefaultCamelContext();

    // connect to embedded ActiveMQ JMS broker
    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
            "tcp://localhost:61616");
    context.addComponent("jms",
            JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));

    // add our route to the CamelContext
    context.addRoutes(new RouteBuilder() {
        @Override
        public void configure() {
            from("jms:queue:QueueA")
            .process(new Processor() {
                public void process(Exchange exchange) throws Exception {
                    String s = exchange.getIn().getBody(String.class);
                    System.out.println("The body of the message is: " + s); 
                }
            }).to("jms:queue:QueueB");
        }
    });

    // start the route and let it do its work
    context.start();
    Thread.sleep(10000);

    // stop the CamelContext
    context.stop();
}

答案 1 :(得分:0)

创建路由不会导致它运行 - 您仍然需要一个正在运行的CamelContext,并且需要传递一条消息才能启动它。尝试首先使用它,只需使用处理器的匿名内部类:

public static void main(String[] args) throws Exception {

    CamelContext context = new DefaultCamelContext();

    RouteBuilder builder = new RouteBuilder() {
        public void configure() {
            from("direct:source").process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    System.out.println("Success!");
                }
            });
        }
    };

    context.addRoutes(builder);

    ProducerTemplate template = context.createProducerTemplate();
    context.start();
    template.sendBody("direct:source", "test");
}

一旦有效,添加一个实现Processor的单独类,并使用它而不是匿名内部类。