我想将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的指导吗?
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);
}
}
<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>
答案 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");