ProducerTemplate无法将body发送到Direct Endpoint

时间:2013-05-17 11:58:49

标签: java apache-camel

我想将Camel用作我正在开发的应用程序的集成点。我的目的是,从我的应用程序中,将消息注入camel以及从camel接收消息并通过camel context路由在应用程序启动时如何处理这些消息。从我所做的研究看来,ProducerTemplate / ConsumerTemplate似乎是与camel上下文中定义的路由进行通信的方式。但是,当我使用ProducerTemplate发布到'direct:connect'时,我收到'No consumer available'异常。即使route1能够与route2通信并且我收到一条说明:

的日志消息,也会发生这种情况
Route: route2 started and consuming from: Endpoint[direct://connect]

任何人都可以为我的目的提供如何最好地使用Camel的指导吗?

CamelEval.java

public class CamelEval {
    public static void main(String[] args) throws Exception {      
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext ("camel-streams.xml");
        SpringCamelContext sctx = new SpringCamelContext (ctx);
        sctx.start();

        sctx.createProducerTemplate().sendBody("direct:connect", "hello world");

        Thread.sleep (5000);
    }
}

驼streams.xml

<camelContext trace="true" xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="stream:in?promptMessage=Enter Something: "/>
        <transform>
            <simple>${body.toUpperCase()}</simple>
        </transform>
        <to uri="direct:connect"/>
    </route>
    <route>
        <from uri="direct:connect"/>
        <to uri="stream:out"/>
    </route>
</camelContext>

1 个答案:

答案 0 :(得分:1)

你最终得到2个Camel's。 XML文件中已经定义了一个。

你应该做的是让Spring从xml文件中给你Camel,而不是使用代码创建一个新的Camel

new SpringCamelContext

最简单的方法是在XML文件中提供camelContext和id

<camelContext id="myCamel" ...>

,然后使用spring api查找具有该id的bean

CamelContext sctx = (CamelContext) cxt.getBean("myCamel");