Ibm mq Spring JMS重新注册持久订阅
我正在开发一个应用程序,它使用SpringJMSv3.1.0来使用来自主题IBMWebSphereMQV7的一些消息,MQ上的监控显示,在每次调用侦听器时,我们都会刷新/重新注册持久订阅。这会导致MQ上出现意外的过载。还值得一提的是,该应用程序正在IBM WepSphere v7上运行 这是我们的配置:Ibm mq Spring JMS重新注册持久订阅,ibm-mq,publish-subscribe,websphere-7,spring-jms,subscriptions,Ibm Mq,Publish Subscribe,Websphere 7,Spring Jms,Subscriptions,我正在开发一个应用程序,它使用SpringJMSv3.1.0来使用来自主题IBMWebSphereMQV7的一些消息,MQ上的监控显示,在每次调用侦听器时,我们都会刷新/重新注册持久订阅。这会导致MQ上出现意外的过载。还值得一提的是,该应用程序正在IBM WepSphere v7上运行 这是我们的配置: <bean id="myMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageLi
<bean id="myMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="destinationResolver" ref="jmsDestResolver"/>
<property name="destination" ref="myTopic"/>
<property name="connectionFactory" ref="myTopicConnectionFactory"/>
<property name="messageListener" ref="myMessageListener" />
<property name="pubSubDomain" value="true" />
<property name="subscriptionDurable" value="true"/>
<property name="durableSubscriptionName" value="${durableSubscriptionName}"/>
<property name="sessionTransacted" value="true"/>
<property name="transactionManager" ref="transactionManager" />
<property name="taskExecutor" ref="taskExecutor" />
<!-- Only CACHE_CONSUMER will lead to a fixed registration:
http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#isRegisteredWithDestination%28%29
-->
<property name="cacheLevelName" value="CACHE_CONSUMER" />
<!-- clientId already specified on the Topic Connection Factory -->
</bean>
<!-- Lookup the topic -->
<jee:jndi-lookup id="myTopic" jndi-name="${myTopic.jndiName}" />
<!-- Lookup the topic connection factory -->
<jee:jndi-lookup id="myTopicConnectionFactory" jndi-name="${myTopicConnectionFactory.jndiName}" />
<!-- Implements javax.jms.MessageListener -->
<bean id="myMessageListener" class="com.sample.jms.MyMessageListener" />
<!-- Get WebSphere work manager -->
<bean id="taskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="${taskManager.jndiName}" />
</bean>
<!--
Lookup WebSpere transaction manager. More info see:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#transaction-application-server-integration-websphere
-->
<bean id="transactionManager" class="org.springframework.transaction.jta.WebSphereUowTransactionManager"/>
有没有办法解决这个问题?
谢谢Andre在我自己对Websphere+Spring的研究中,我遇到了这个问题。也许它会帮助你:
基本上,Spring在不使用池的情况下创建了大量的连接如何填充?是否每次都会生成不同的名称?谢谢您的评论!它是通过属性文件填充的,并且在应用程序运行后不会更改。Andre,您解决了这个问题吗?如果是这样,请发布一个答案。我们无法解决这个问题,所以我们决定用MDB+Spring实现侦听器。我猜WAS正在创建一个连接池,并向Spring发送一个处理程序,然后它将提供物理连接。但是,此物理连接每次都会更改,因为WAS不知道这是同一个客户端。这就是为什么即使在Spring上缓存消费者,它也不起作用,因为您的缓存不是真正的对象,而是缓存WAS处理程序。
durableSubscriptionName=myMessageListenerContainer
myTopic.jndiName=jms/myTopic
myTopicConnectionFactory.jndiName=jms/myTopicConnectionFactory
taskManager.jndiName=wm/default