2011-05-03 76 views
0

我一直在浏览论坛和网站几天,关于如何以很少的运气线程化合并Spring JMS订阅者。当使用带有jms:listener-container的队列时,有一个并发属性,但是它的主题是保持并发性为1.鉴于此,我的线程池主题订户的选项是什么?Spring主题订阅者线程池

我开始了从MessageListener路线与的onMessage的实现与:

<bean id="messageListener" class="com.app.mdp.Receiver"/> 
    <jms:listener-container container-type="default" 
     connection-factory="connectionFactory" acknowledge="auto" concurrency="1" 
     destination-type="topic" prefetch="1"> 
     <jms:listener destination="topTopic" ref="messageListener" 
      method="onMessage" subscription="ASub" /> 
    </jms:listener-container> 

    <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="jms/jms-top-notx" /> 
    </bean> 

的问题,这是我得到的最JMS一个线程接收数据的时间。

然后我试图使用任务执行与配置:

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> 
    <property name="corePoolSize" value="10" /> 
    <property name="maxPoolSize" value="20" /> 
    <property name="queueCapacity" value="0" /> 
</bean> 

..但它似乎需要并发是在JMS更大的价值:监听器容器的设置(除非我误解) 。但我一次只收到一条线索。

我有些失落,开始认为Spring订阅JMS主题数据时没有支持多线程的功能。如果是这样的话,我的选择似乎是:

  • 实现我自己的线程池。时间表订户>通过jmsTmplate.receive()数据 - 环>通过每个消息预定义螺纹
  • 回复到EJB的(我不想做)
  • 别的东西,我还没有想

任何帮助将不胜感激。

回答