我无法连接到具有SEDA队列的骆驼路线。在服务器端,我有以下配置:

<camel:route>
            <camel:from uri="seda:input"/>
            <camel:log  message =">>>>>data is : ${body}"/>
            <camel:inOnly uri="activemq:queue:TESTQUEUE"/>
        </camel:route>


我正在尝试从这样的独立客户端访问此路由:

public static void main(String[] args) {

        CamelContext context = new DefaultCamelContext();
        producer = context.createProducerTemplate();
            producer.sendBody("seda:input","Hey");

}


但是我的制作人无法连接到seda队列。
无法到达我的路线队列。无法在我的bean属性中添加camelContext。我收到“ bean类的无效属性'camelContext'”。如果我将尸体发送到SEDA队列,则消息正在发送,但未发送到溃败的下一个元素

最佳答案

如Petter所建议,您的客户端需要连接到定义SEDA路由的同一Camel Context。在您的示例中,您似乎正在创建一个新的DefaultCamelContext()并尝试将消息发送到所定义的路由在另一种情况下。

通常,我在Spring XML中定义Camel Context,然后将上下文注入需要它的任何类中。

<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="myRouter"/>
</camelContext>

<bean id="myClient" class="com.mycompany.MyClient">
    <property name="camelContext" ref="camelContext"/>
</bean>


然后,您的客户代码只需要调用以下内容即可...

getCamelContext().createProducerTemplate().sendBody("seda:input","Hey");


就是说,如果您的客户端代码不在同一JVM中,或者无法获取同一CamelContext的句柄,那么您的选择是使用JMS,REST,HTTP(或支持远程客户端接口的任何camel component)。而不是SEDA端点周围。

例如,您可以像这样通过HTTP端点(通过camel-jetty)包装对SEDA队列的访问...

from("jetty:http://localhost:9001/input").to("seda:input");

10-08 13:57