我一直在浏览论坛和网站几天,关于如何以很少的运气线程化合并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的(我不想做)
- 别的东西,我还没有想
任何帮助将不胜感激。