2012-07-21 51 views
0

我試圖在Camel和ActiveMQ上使用Spring AsyncServlet。我正在使用以下版本。帶ActiveMQ,Camel和Jetty的Spring AsyncServlet

<spring.version>3.2.0.M1</spring.version> 
    <camel.version>2.10.0</camel.version> 
    <jetty.version>8.1.3.v20120416</jetty.version> 
    <activemq.version>5.6.0</activemq.version> 

我想將消息推送到連接到服務器(Jetty)的客戶端。

我的駱駝路線如下所示。

from("mina:udp://source_machine:9998").to("activemq:myqueue"); 

我在我的春節,基於this /駱駝配置如下。

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="vm://localhost:61616" /> 
</bean> 

<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> 
    <property name="maxConnections" value="8" /> 
    <property name="maximumActive" value="500" /> 
    <property name="connectionFactory" ref="jmsConnectionFactory" /> 
</bean> 

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory" /> 
    <property name="transacted" value="false" /> 
    <property name="concurrentConsumers" value="10" /> 
</bean> 

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> 
    <property name="configuration" ref="jmsConfig" /> 
</bean> 

使用上面的配置,我可以輸入信息到我的隊列(至少我沒有得到任何錯誤。)但是,我不知道如何從這個隊列中讀取。

  1. 這是在使用Spring,Camel和Jetty時配置ActiveMQ的正確方法嗎?
  2. 如何添加/註冊MessageListener javax.jms.MessageListener以便我可以從我的隊列中讀取。
  3. 如何控制隊列大小並使隊列非持久?
  4. 它可以添加多個聽衆

謝謝。

回答

0

你的配置對於activemq來說看起來不錯。沒有關於碼頭的想法。您提供的代碼段中沒有碼頭配置。

在駱駝路線中,您可以簡單地使用activemq端點來監聽隊列。 (「activemq:myqueue」)。到(「log:test」);

Btw。我通常使用jms ednpoint而不是ActiveMQ。這樣做的好處是,如果你必須在某個時候切換到另一個jms提供程序,那麼它更容易。

您也可以使用connectionfactory並在bean中使用您自己的DefaultMessageListenerContainer。然後看看spring配置如何做到這一點,但這與駱駝沒有任何關係。

您可以在activemq配置中控制隊列大小。使用http://activemq.apache.org/producer-flow-control.html

您不能使隊列不持久,但您可以定義您發送的消息爲非持久消息。 http://activemq.apache.org/how-do-i-disable-persistence.html

您可以定義許多偵聽器,甚至可以使用上面的from端點上的maxConcurrentConsumers選項來定義一個偵聽器的線程數。