1

Spring JMS (v3.1.0) を使用してトピック (IBM WebSphere MQ v7) からいくつかのメッセージを消費するアプリケーションに取り組んでおり、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"/>

編集:これらは私たちが使用しているプロパティです:

durableSubscriptionName=myMessageListenerContainer
myTopic.jndiName=jms/myTopic
myTopicConnectionFactory.jndiName=jms/myTopicConnectionFactory
taskManager.jndiName=wm/default

それを解決する方法はありますか?ありがとう!アンドレ

4

1 に答える 1

0

Websphere + Spring を使用した私自身の調査で、これに出くわしました。多分それはあなたを助けるでしょう:

https://stackoverflow.com/a/795767/945150

基本的に、Spring はプールを使用せずにたくさんの接続を作成しています

于 2012-10-23T23:17:44.437 に答える