我几天来一直在浏览论坛和网站,关于如何用很少的运气来拼接Spring JMS订阅者。当使用带有jms:listener-container的队列时,有一个并发属性,但它有一个主题,它规定将并发性保持在1.鉴于此,我有什么选择对主题订阅者进行线程池化?
我开始使用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接收数据的线程。
然后我尝试使用config:
的任务执行器<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:listener-container设置中具有更大的价值(除非我误解)。我一次只收到一个帖子。
我有点茫然,开始认为spring在订阅JMS主题数据时没有支持多线程的功能。如果是这种情况,我的选择似乎是:
非常感谢任何帮助。
答案 0 :(得分:0)
您是否正在使用Websphere进行JMS。如果是,那么Websphere中有一个配置,您可以在其中配置一次可以为应用程序建立的连接数和会话数。 假设您有10个会话和10个连接,那么您将有100个连接(通道)向MQ服务器打开。参考此链接: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/umj_sesspoolset.html