2010-10-02 121 views
1

我的骆驼路径如下问题使用Apache的骆驼

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" > 
    <route> 
     <from uri="bean:SendClass?method=send" /> 
     <to uri="jms:MyQueue" pattern="InOnly" /> 
    </route> 
    <route> 
    <from uri="jms:MyQueue" /> 
    <to uri="bean:recvClass?method=recv" /> 
    </route> 
    </camelContext> 

send方法给出了两个bean之间的路由与发送消息,我认为这个问题是骆驼当recv bean接收到消息并重新发送相同的消息(一秒钟内有几百个消息)时,重新启动 路由。理想情况下,我希望它在发送方法被激活并且创建新消息时发送消息 (即JMS队列应该有唯一的消息)。我该怎么做?

可能的解决方案之中:

  1. 是他们的一些属性,我可以把<from.../>内做到这一点?
  2. 编写处理器来过滤发送Bean和队列之间的唯一消息。
  3. 是他们的路由,而无需使用<from uri="bean:..." />

感谢 sanre6

回答

2

你不应该有第一路线的其他方式。当你这样做时,你告诉Camel不断调用该bean上的send方法并路由它。因此,为什么你每秒看到100条消息。

相反,您应该在bean代码中使用一些Camel API并将消息发送到JMS队列。例如使用ProducerTemplate。

+0

我认为我可以一次使用Spring XMl或Java DSl。所以,如果我使用像template.sendBody(“activemq:MyQueue”,“世界!”); ....那么它意味着我必须使用Java DSl的Producertemplate吗?我如何用Spring XML来做到这一点。感谢您的回答 – sanre6 2010-10-03 11:30:02

+0

在send()方法的Java代码中。这是您向Camel发送消息的地方,因为它在send()方法被调用时发生。 – 2010-10-03 15:05:06

+0

参见例如:http://camel.apache.org/pojo-producing.html – 2010-10-03 15:07:14