Ibm mq Spring JMS重新注册持久订阅

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

我正在开发一个应用程序,它使用SpringJMSv3.1.0来使用来自主题IBMWebSphereMQV7的一些消息,MQ上的监控显示,在每次调用侦听器时,我们都会刷新/重新注册持久订阅。这会导致MQ上出现意外的过载。还值得一提的是,该应用程序正在IBM WepSphere v7上运行

这是我们的配置:

<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