2016-01-29 145 views
1

我在我們的項目中需要使用線程並行處理JMS消息。目前我們的項目是這樣工作的:當文件被放置在目錄中時,輪詢器生成消息,出站適配器創建JMS消息並將其發送到businessQueue。 JMS偵聽器偵聽隊列中的消息並啓動批處理作業來處理文件。所以一次只能處理1個文件。使用多線程從JMS隊列中消費消息

<jms:listener-container concurrency="1" 
     acknowledge="client" container-type="default" destination-type="queue" 
     connection-factory="cachingJmsConnectionFactory" cache="auto"> 
     <jms:listener id="businessFileJmsListener" ref="businessFileJmsReceiver" 
      method="onMessage" destination="${BUSINESS_JMS_QUEUE_NAME}" /> 
    </jms:listener-container> 

要求是使用線程從隊列中讀取JMS消息並並行處理文件。例如,我們必須一次讀取3條消息,並啓動3個批處理作業,並使用線程處理3個文件。在上面的配置中有一個叫做併發性的屬性。我不知道如果我們增加那個房產的數量,它會不會起作用?請建議是否有任何方法來實施我們的要求。我最後的要求是一次從隊列中讀取3條JMS消息,並一次處理3個文件。請建議。謝謝。

回答

0

是的,concurrency="3"將在3個不同的線程上接收消息。

+0

謝謝。它現在正在工作,但是如果我們想要在FIFO基礎上處理消息和相應的文件,那麼它將不起作用,因爲線程執行順序沒有保證。 – Nagendra

+0

你不能兩面都有;如果你想保證執行順序,你只能使用一個線程。 –