2012-05-05 52 views
1

我无法连接到具有SEDA队列骆驼航线。在服务器方面我有以下配置:连接到Camel- 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队列,消息被去那里而不是在骆驼的SEDA组分indended作为asynchrnous内部通道的击溃

回答

5

Petter建议您的客户端需要连接到定义SEDA路由的相同Camel上下文。在您的示例中,您似乎创建了一个新的DefaultCamelContext()并试图通过发送消息在另一个上下文中定义的路线。

一般来说,我在Spring XML定义骆驼环境,然后注入到上下文需要它的任何类...

<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 en dpoint。

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

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

无法在我的bean属性中添加camelContext。我得到“bean属性的无效属性camelContext”。如果我将正文发送到SEDA队列,则消息正在那里,但不会到溃败的下一个元素 –

+0

根据您的评论更新我的问题 –

+1

无效属性表示您尚未在bean类中定义getter/setter。 。 –

1

下一个元素。如果您需要将消息处理分解为多个线程并具有更具弹性的实现,这非常有用。

在你的榜样,你有一个ActiveMQ的端点。从概念上讲,它与SEDA组件几乎完全相同,但有更多的提示。我建议你使用activemq或其他协议来与Camel进行通信。也就是说,如果你的客户端运行在与Camel相同的Java应用程序中,并且你的客户端可以获得Camel上下文(这是我一般推荐的设计),你可以使用ProducerTemplates向SEDA组件发送消息。看看虚拟机组件,它是几乎一样的SEDA,但可以在同一个虚拟机,而不是相同的骆驼上下文中使用。 How ProducerTemplate works.

+0

感谢您详细的答复。我的问题的一部分是如何在第一个地方创建SEDA组件。 –

+1

骆驼赛达在您定义端点时为您创建SEDA队列(如Petter所述)。从客户的角度来看,您需要使用Camel ProducerTemplate(或其他路由)将消息传递到此端点,如下所示... context.createProducerTemplate()。sendBody(“seda:input”,“myMessage”).. –

+0

@boday我已根据您的输入更新了我的问题,但仍然无法连接到SEDA队列。 –