Hi qpid devs,

I am using qpid-jms-client in conjunction with Spring's
SingleConnectionFactory with reconnectOnException set to true. I am
experiencing strange behavior in rare cases when the connection to the
broker is lost. It seems that in these cases, there is no JMSException
propagated that can be detected by the SingleConnectionFactory.

If that happens, Spring does not know about the connection loss but detects
the closing of MessageConsumers. Spring will end up in a loop where it
tries to re-create the JmsListener but fails.

This a logging when the error occurred:

2019-09-18T13:39:26,628 [WARN ] [AmqpProvider :(1):[amqps://10.0.0.12:5672]]
AbstractEventExecutor - A task raised an exception. Task:
org.apache.qpid.jms.provider.amqp.AmqpProvider$$Lambda$328/888700862@3a025a5a

java.lang.NullPointerException: null

        at
org.apache.qpid.jms.JmsLocalTransactionContext.onConnectionInterrupted(JmsLocalTransactionContext.java:333)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsSession.onConnectionInterrupted(JmsSession.java:1340)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsConnection.onConnectionFailure(JmsConnection.java:1356)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.provider.amqp.AmqpProvider.fireProviderException(AmqpProvider.java:1069)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.provider.amqp.AmqpProvider.lambda$onTransportClosed$18(AmqpProvider.java:867)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at
io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:315)
~[netty-transport-native-epoll-4.1.29.Final-linux-x86_64.jar!/:4.1.29.Final]

        at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]

2019-09-18T13:40:26,612 [INFO ] [DefaultMessageListenerContainer-3]
JmsLocalTransactionContext - Rollback failed for transaction:
TX:ID:82e54721-d100-487b-8267-569e6f69d371:1:21338

2019-09-18T13:40:26,612 [WARN ] [DefaultMessageListenerContainer-3]
DefaultMessageListenerContainer - Setup of JMS message listener invoker
failed for destination 'Myqueue' - trying to recover. Cause: Remote did not
respond to a drain request in time

2019-09-18T13:40:26,613 [INFO ] [QpidJMS Connection Executor:
ID:82e54721-d100-487b-8267-569e6f69d371:1] JmsSession - A JMS
MessageConsumer has been closed: JmsConsumerInfo: {
ID:82e54721-d100-487b-8267-569e6f69d371:1:10695:1, destination = Myqueue}

2019-09-18T13:40:26,613 [INFO ] [DefaultMessageListenerContainer-3]
DefaultMessageListenerContainer - Successfully refreshed JMS Connection

2019-09-18T13:40:26,615 [WARN ] [QpidJMS Connection Executor:
ID:82e54721-d100-487b-8267-569e6f69d371:1] QpidJMSThreadFactory - Thread:
QpidJMS Connection Executor: ID:82e54721-d100-487b-8267-569e6f69d371:1
failed due to an uncaught exception: null

2019-09-18T13:40:26,676 [INFO ] [QpidJMS Connection Executor:
ID:82e54721-d100-487b-8267-569e6f69d371:1] JmsSession - A JMS
MessageConsumer has been closed: JmsConsumerInfo: {
ID:82e54721-d100-487b-8267-569e6f69d371:1:10696:1, destination = Myqueue}

2019-09-18T13:40:26,676 [INFO ] [DefaultMessageListenerContainer-2]
JmsLocalTransactionContext - Rollback failed for transaction:
TX:ID:82e54721-d100-487b-8267-569e6f69d371:1:21340

2019-09-18T13:40:26,677 [WARN ] [QpidJMS Connection Executor:
ID:82e54721-d100-487b-8267-569e6f69d371:1] QpidJMSThreadFactory - Thread:
QpidJMS Connection Executor: ID:82e54721-d100-487b-8267-569e6f69d371:1
failed due to an uncaught exception: null

2019-09-18T13:40:27,070 [INFO ] [QpidJMS Connection Executor:
ID:82e54721-d100-487b-8267-569e6f69d371:1] JmsSession - A JMS
MessageConsumer has been closed: JmsConsumerInfo: {
ID:82e54721-d100-487b-8267-569e6f69d371:1:10697:1, destination = Myqueue}

2019-09-18T13:40:27,070 [INFO ] [DefaultMessageListenerContainer-1]
JmsLocalTransactionContext - Rollback failed for transaction:
TX:ID:82e54721-d100-487b-8267-569e6f69d371:1:21342

2019-09-18T13:40:27,070 [WARN ] [QpidJMS Connection Executor:
ID:82e54721-d100-487b-8267-569e6f69d371:1] QpidJMSThreadFactory - Thread:
QpidJMS Connection Executor: ID:82e54721-d100-487b-8267-569e6f69d371:1
failed due to an uncaught exception: null

2019-09-18T13:40:27,070 [WARN ] [DefaultMessageListenerContainer-4]
DefaultMessageListenerContainer - Setup of JMS message listener invoker
failed for destination 'Myqueue' - trying to recover. Cause: The JMS
connection has failed: Transport connection remotely closed.

2019-09-18T13:40:27,070 [INFO ] [DefaultMessageListenerContainer-4]
DefaultMessageListenerContainer - Successfully refreshed JMS Connection

2019-09-18T13:40:27,071 [WARN ] [DefaultMessageListenerContainer-6]
DefaultMessageListenerContainer - Setup of JMS message listener invoker
failed for destination 'Myqueue' - trying to recover. Cause: The JMS
connection has failed: Transport connection remotely closed.

2019-09-18T13:40:27,071 [INFO ] [DefaultMessageListenerContainer-6]
DefaultMessageListenerContainer - Successfully refreshed JMS Connection

2019-09-18T13:40:32,072 [WARN ] [DefaultMessageListenerContainer-7]
DefaultMessageListenerContainer - Setup of JMS message listener invoker
failed for destination 'Myqueue' - trying to recover. Cause: The JMS
connection has failed: Transport connection remotely closed.

...



As said, this happens only in rare cases which makes it harder to debug.


2019-09-18T13:44:18,475 [DEBUG] [AmqpProvider :(1):[amqps://10.0.0.12:5672]]
AmqpProvider - Transport connection remotely closed

2019-09-18T13:44:18,484 [WARN ] [QpidJMS Connection Executor:
ID:59b55176-27c9-4827-8484-f910f5c7d13c:1] SingleConnectionFactory -
Encountered a JMSException - resetting the underlying JMS Connection

javax.jms.JMSException: Transport connection remotely closed.

        at
org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:86)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:108)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsConnection.onAsyncException(JmsConnection.java:1531)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsConnection.onProviderException(JmsConnection.java:1515)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsConnection.onConnectionFailure(JmsConnection.java:1359)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.provider.amqp.AmqpProvider.fireProviderException(AmqpProvider.java:1069)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.provider.amqp.AmqpProvider.lambda$onTransportClosed$18(AmqpProvider.java:867)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at
io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:315)
~[netty-transport-native-epoll-4.1.29.Final-linux-x86_64.jar!/:4.1.29.Final]

        at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]

Caused by: java.io.IOException: Transport connection remotely closed.

        ... 6 more

2019-09-18T13:44:18,484 [DEBUG] [QpidJMS Connection Executor:
ID:59b55176-27c9-4827-8484-f910f5c7d13c:1] SingleConnectionFactory -
Closing shared JMS Connection: org.apache.qpid.jms.JmsConnection@3dd1dc90

2019-09-18T13:44:18,485 [DEBUG] [DefaultMessageListenerContainer-2]
JmsLocalTransactionContext - Rollback:
TX:ID:59b55176-27c9-4827-8484-f910f5c7d13c:1:75

2019-09-18T13:44:18,485 [INFO ] [DefaultMessageListenerContainer-2]
JmsLocalTransactionContext - Rollback failed for transaction:
TX:ID:59b55176-27c9-4827-8484-f910f5c7d13c:1:75

2019-09-18T13:44:18,485 [WARN ] [DefaultMessageListenerContainer-1]
DefaultMessageListenerContainer - Setup of JMS message listener invoker
failed for destination 'Myqueue' - trying to recover. Cause: Transport
connection remotely closed.

javax.jms.JMSException: Transport connection remotely closed.

        at
org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:86)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:108)
~[qpid-jms-client-0.39.0.jar!/:?]

        at org.apache.qpid.jms.JmsConnection.pull(JmsConnection.java:914)
~[qpid-jms-client-0.39.0.jar!/:?]

        at org.apache.qpid.jms.JmsConnection.pull(JmsConnection.java:898)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsMessageConsumer.performPullIfRequired(JmsMessageConsumer.java:707)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsMessageConsumer.dequeue(JmsMessageConsumer.java:298)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsMessageConsumer.receive(JmsMessageConsumer.java:207)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.springframework.jms.support.destination.JmsDestinationAccessor.receiveFromConsumer(JmsDestinationAccessor.java:132)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:418)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:303)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:257)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1189)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1179)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1076)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]

Caused by: java.io.IOException: Transport connection remotely closed.

        at
org.apache.qpid.jms.provider.amqp.AmqpProvider.lambda$onTransportClosed$18(AmqpProvider.java:867)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at
io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:315)
~[netty-transport-native-epoll-4.1.29.Final-linux-x86_64.jar!/:4.1.29.Final]

        at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        ... 1 more

2019-09-18T13:44:18,488 [DEBUG] [DefaultMessageListenerContainer-1]
JmsLocalTransactionContext - Rollback:
TX:ID:59b55176-27c9-4827-8484-f910f5c7d13c:1:71

2019-09-18T13:44:18,488 [DEBUG] [QpidJMS Connection Executor:
ID:59b55176-27c9-4827-8484-f910f5c7d13c:1] JmsLocalTransactionContext -
Rollback: TX:ID:59b55176-27c9-4827-8484-f910f5c7d13c:1:73

2019-09-18T13:44:18,488 [INFO ] [DefaultMessageListenerContainer-1]
JmsLocalTransactionContext - Rollback failed for transaction:
TX:ID:59b55176-27c9-4827-8484-f910f5c7d13c:1:71

2019-09-18T13:44:18,488 [INFO ] [QpidJMS Connection Executor:
ID:59b55176-27c9-4827-8484-f910f5c7d13c:1] JmsLocalTransactionContext -
Rollback failed for transaction:
TX:ID:59b55176-27c9-4827-8484-f910f5c7d13c:1:73

2019-09-18T13:44:18,488 [WARN ] [DefaultMessageListenerContainer-1]
DefaultMessageListenerContainer - Setup of JMS message listener invoker
failed for destination 'Myqueue' - trying to recover. Cause: Transport
connection remotely closed.

javax.jms.JMSException: Transport connection remotely closed.

        at
org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:86)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:108)
~[qpid-jms-client-0.39.0.jar!/:?]

        at org.apache.qpid.jms.JmsConnection.pull(JmsConnection.java:914)
~[qpid-jms-client-0.39.0.jar!/:?]

        at org.apache.qpid.jms.JmsConnection.pull(JmsConnection.java:898)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsMessageConsumer.performPullIfRequired(JmsMessageConsumer.java:707)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsMessageConsumer.dequeue(JmsMessageConsumer.java:298)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.apache.qpid.jms.JmsMessageConsumer.receive(JmsMessageConsumer.java:207)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
org.springframework.jms.support.destination.JmsDestinationAccessor.receiveFromConsumer(JmsDestinationAccessor.java:132)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:418)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:303)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:257)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1189)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1179)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1076)
~[spring-jms-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]

        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]

Caused by: java.io.IOException: Transport connection remotely closed.

        at
org.apache.qpid.jms.provider.amqp.AmqpProvider.lambda$onTransportClosed$18(AmqpProvider.java:867)
~[qpid-jms-client-0.39.0.jar!/:?]

        at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        at
io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:315)
~[netty-transport-native-epoll-4.1.29.Final-linux-x86_64.jar!/:4.1.29.Final]

        at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]

        ... 1 more

2019-09-18T13:44:18,492 [DEBUG] [QpidJMS Connection Executor:
ID:59b55176-27c9-4827-8484-f910f5c7d13c:1] ThreadPoolUtils - Shutdown of
ExecutorService: java.util.concurrent.ThreadPoolExecutor@3bfb6759[Shutting
down, pool size = 1, active threads = 1, queued tasks = 1, completed tasks
= 1] is shutdown: true and terminated: false took: 0.000 seconds.

2019-09-18T13:44:18,504 [DEBUG] [QpidJMS Connection Executor:
ID:59b55176-27c9-4827-8484-f910f5c7d13c:1] SingleConnectionFactory -
Ignoring Connection state exception - assuming already closed:
org.apache.qpid.jms.exceptions.JmsConnectionFailedException: The JMS
connection has failed: Transport connection remotely closed.

2019-09-18T13:44:19,039 [DEBUG] [AmqpProvider :(2):[amqps://10.0.0.12:5672]]
SaslMechanismFinder - Skipping SASL-PLAIN mechanism because the available
credentials are not sufficient

2019-09-18T13:44:19,039 [INFO ] [AmqpProvider :(2):[amqps://10.0.0.12:5672]]
SaslMechanismFinder - Best match for SASL auth was: SASL-ANONYMOUS

2019-09-18T13:44:19,055 [DEBUG] [AmqpProvider :(2):[amqps://10.0.0.12:5672]]
AmqpConnectionBuilder - AmqpConnection {
ID:7d70988f-4fc1-4415-bb69-7ecf647a0856:2 } is now open:

2019-09-18T13:44:19,056 [INFO ] [AmqpProvider :(2):[amqps://10.0.0.12:5672]]
JmsConnection - Connection ID:7d70988f-4fc1-4415-bb69-7ecf647a0856:2
connected to remote Broker: amqps://10.0.0.12:5672

2019-09-18T13:44:19,061 [INFO ] [DefaultMessageListenerContainer-1]
DefaultMessageListenerContainer - Successfully refreshed JMS Connection




Has anyone seen this before? I am using qpid-jms-client 0.39.0.
I am trying to reproduce it with debug-logging enabled, but it is hard to
reproduce..


Thanks,
Mario

Reply via email to