[英]Weblogic JMS client threads stuck while refreshing connection
問候,
我們正在使用Spring使用wlfullclient.jar與Weblogic JMS服務器集成。 每隔一段時間,jmsListenerthreads就會卡住。 我們已經觀察到這種情況在刷新連接時發生。
使用的版本:wlfullClient.jar:10.0.1春季:3.0.3
堆棧跟蹤有兩個卡住的線程:
Name: jmsListenerContainer-1770
State: WAITING on weblogic.jms.client.JMSSession@35c0fb37
Total blocked: 3,681 Total waited: 3,664
Stack trace:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:485)
weblogic.jms.client.JMSSession.waitForState(JMSSession.java:4239)
weblogic.jms.client.JMSSession.close(JMSSession.java:1259)
weblogic.jms.client.JMSConnection.closeSessions(JMSConnection.java:1076)
weblogic.jms.client.JMSConnection.mergedCloseAndOnException(JMSConnection.java:950)
- locked weblogic.jms.client.JMSConnection@3263f76c
weblogic.jms.client.JMSConnection.close(JMSConnection.java:763)
weblogic.jms.client.ReconnectController.close(ReconnectController.java:426)
org.springframework.jms.connection.ConnectionFactoryUtils.releaseConnection(ConnectionFactoryUtils.java:80)
org.springframework.jms.listener.AbstractJmsListeningContainer.refreshSharedConnection(AbstractJmsListeningContainer.java:385)
- locked java.lang.Object@51ce8880
org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful(DefaultMessageListenerContainer.java:856)
org.springframework.jms.listener.DefaultMessageListenerContainer.recoverAfterListenerSetupFailure(DefaultMessageListenerContainer.java:838)
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:969)
- locked java.lang.Object@c2330fa
java.lang.Thread.run(Thread.java:619)
Name: jmsListenerContainer-1755
State: TIMED_WAITING on java.lang.Object@b5c4560
Total blocked: 3,588 Total waited: 3,605
Stack trace:
java.lang.Object.wait(Native Method)
weblogic.jms.client.ReconnectController.waitForStateInternal(ReconnectController.java:309)
weblogic.jms.client.ReconnectController.analyzeExceptionAndReconnect(ReconnectController.java:525)
weblogic.jms.client.ReconnectController.computeJMSConsumer(ReconnectController.java:652)
weblogic.jms.client.WLConsumerImpl.receive(WLConsumerImpl.java:166)
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:405)
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:308)
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1056)
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1048)
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
java.lang.Thread.run(Thread.java:619)
Name: jmsListenerContainer-1732
State: BLOCKED on java.lang.Object@51ce8880 owned by: jmsListenerContainer-1770
Total blocked: 3,586 Total waited: 3,584
Stack trace:
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.clearResources(DefaultMessageListenerContainer.java:1096)
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:958)
java.lang.Thread.run(Thread.java:619)
彈簧配置:
<bean id="messageListener"
class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<constructor-arg>
<bean class="com.eharmony.matching.mnssender.jms.DefaultDtoDelegate" />
</constructor-arg>
<property name="defaultListenerMethod" value="receive" />
<property name="messageConverter">
<bean class="com.eharmony.matching.mnssender.jms.Converter" />
</property>
</bean>
<bean id="jmsListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="${MNSClient.jms.concurrent.consumers}" />
<property name="connectionFactory" ref="jmsQueueConnectionFactory" />
<property name="destination" ref="queue" />
<property name="sessionTransacted" value="true" />
<property name="messageListener" ref="messageListener" />
</bean>
<bean id="jmsQueueConnectionFactory"
class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory">
<ref bean="internalJmsQueueConnectionFactory" />
</property>
<property name="username">
<value>${MNSClient.receive.jms.user}</value>
</property>
<property name="password">
<value>${MNSClient.receive.jms.password}</value>
</property>
</bean>
<bean id="internalJmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>${MNSClient.receive.jms.connectionFactoryName}</value>
</property>
</bean>
<!-- RECEIVING JMS MESSAGE -->
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">${MNSClient.receive.jms.initialFactoryName}</prop>
<prop key="java.naming.provider.url">${MNSClient.receive.jms.providerUrl}</prop>
</props>
</property>
</bean>
<bean id="queue" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>${MNSClient.receive.jms.queueName}</value>
</property>
</bean>
任何指針將不勝感激!
問候。
這兩個線程是否都在同一會話(或從同一會話派生的使用者/生產者)上調用方法? 會話及其派生的任何內容(生產者,使用者等)都不是線程安全的,因此您需要防止多個線程同時對其進行操作。 通過您自己的鎖定序列化訪問權限,或者為每個生產者/消費者創建不同的會話。
在計數是否要從多個線程訪問會話時,不要忘記異步消息處理中涉及的隱式線程(onMessage()的使用)。
如果您違反該規則,請期待壞事(例如死鎖)。
好的,通過更多的谷歌搜索,我找到了答案。 我們在Spring JMS集成中遇到了一個錯誤: https : //jira.springframework.org/browse/SPR-7366?page= com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue- tabs
現在,此問題已得到修復,我們將更新為Spring的最新版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.