2013-03-29 55 views
0

我正在嘗試JMS隊列的示例應用程序..我希望消息進入隊列,直到我的標誌設置爲true。我使用Spring框架和MDP聽者以下配置:JMS隊列:如何將消息存儲在隊列中,直到標誌被設置爲true

服務器的context.xml:

<bean id="MDPListener" class="controller.MDPListener"></bean> 

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

<bean id="dataQueue" class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg value="dataQueue15"></constructor-arg> 

</bean> 

<bean id="container" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
     <property name="connectionFactory" ref="connectionFactory"/> 
     <property name="messageListener" ref="MDPListener"/> 
     <property name="destination" ref="dataQueue"/> 
     <property name="sessionTransacted" value="true"/> 



</bean> 

我的onMessage具有下面的代碼:

public void onMessage(Message message,Session session) {   

     System.out.println("The session: "+session.toString()); 
     System.out.println("New Message arrived part2 .. Passing to Controller"); 

     Boolean g=false; 

     if(g==true) 
     { 
      System.out.println("Data true..session committed!!"); 
     } 
     else 
     { 

      System.out.println("in the queue"); 
      throw new RuntimeException("Saved"); 
     } 
} 

現在,當拋出一個異常,消息停留在隊列中,並且控件返回到同一個偵聽器,該偵聽器再次偵聽相同的消息,並在某個時間後停止。這導致死隊列。我無法存儲該消息。我希望我的聽衆能夠聽取隊列,但不要聽到之前的消息,而是聽聽下一個消息。請幫忙!

+0

我相信JMS隊列是非常糟糕的地方存儲的東西。如果你不希望你的消息被傳遞 - 只是不要將它發佈到隊列中。 –

回答

1

JMS不會這樣工作 - 您必須將消息移動到代碼中的另一個隊列中。

或者,使用ActiveMQ,您可以配置重新傳送策略以更快地將消息發送到DLQ(我相信默認值是6次重試)。

+0

感謝上帝!最後一個簡單的和點的答案!帽子關! :D現在適用於我。重新交付政策是關鍵 – Chandeep