2016-01-29 194 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

你不能两面都有;如果你想保证执行顺序,你只能使用一个线程。 –