我无法连接到具有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");