2010-10-02 128 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