2014-02-21 121 views
0

我正在使用jms:inbound-gateway從現有的Spring JMS應用程序中抽取來自ActiveMQ的消息。此應用程序是一個作業處理器,將作業從隊列中取出並將結果發送回隊列。目前的一切都很好。使用Spring jms處理單個消息

我想修改這個應用程序來接受一個且只有一個工作,處理它,然後退出,但是我一直沒有找到辦法乾淨地做到這一點。被調用的方法必須返回結果,Spring的結果會自動放回到隊列中。有沒有辦法告訴Spring停止接受1的消息?您如何知道發送回覆消息的時間,以便您可以退出。

在更一般的情況下,如果您有一個應用程序想要停止接受消息並完成處理,以便可以乾淨地退出,那該怎麼辦?

在此先感謝您的任何建議。

回答

0

聽起來你應該使用JmsTemplate.receive。入站網關適用於消息驅動模型。這聽起來像是當你使用消息隊列進行傳輸時,你並沒有真正執行消息驅動的處理模型。顯然這不是問題,但如果你的目標是處理一條消息,你應該只使用JmsTemplate。

另一種方法是使用默認消息偵聽器容器,確保線程設置爲1,然後確保您的activemq設置沒有預讀設置(即一次只讀取一條消息,而不再是)。然後,在onMessage方法結束時,調用DMLC.stop方法。