0

我想使用 Camel 作为我正在开发的应用程序的集成点。我的意图是,从我的应用程序中,将消息注入骆驼,并从骆驼接收消息,并通过骆驼上下文路由在应用程序启动时处理这些消息。从我所做的研究来看,ProducerTemplate / ConsumerTemplate 似乎是与骆驼上下文中定义的路由进行通信的方式。但是,当我使用 ProducerTemplate 发布到“直接:连接”时,我收到“没有可用的消费者”异常。即使 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);
    }
}

骆驼流.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>
4

1 回答 1

1

你最终得到了 2 个骆驼。XML 文件中已经定义了一个。

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

new SpringCamelContext

最简单的就是在 XML 文件中给出 camelContext 和 id

<camelContext id="myCamel" ...>

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

CamelContext sctx = (CamelContext) cxt.getBean("myCamel");
于 2013-05-17T12:20:05.807 回答