[ 
https://issues.apache.org/jira/browse/AMQ-1376?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Timothy Bish closed AMQ-1376.
-----------------------------

    Resolution: Duplicate

This is in some ways related to AMQ-3393.  There is also the fact that Stomp 
1.0 doesn't allow for a keep alive so sometimes connection drops aren't 
detected.  The processing logic for dropped connections has been improved quite 
a bit so the queued messages should be redelivered to another client if the 
dropped connection is detected.  

Reopen if the problem persists.

> Improperly closed connections preventing message redelivery
> -----------------------------------------------------------
>
>                 Key: AMQ-1376
>                 URL: https://issues.apache.org/jira/browse/AMQ-1376
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Transport
>    Affects Versions: 5.0.0
>            Reporter: Jacob Burkhart
>            Assignee: Hiram Chirino
>             Fix For: AGING_TO_DIE
>
>
> This is a reproducible case of a DEAD Consumer that never gets cleaned up.
> I am using telnet to manually test STOMP message consumption.
> First I put a message into the queue
> I then connect and subscribe to that queue and get the message:
> CONNECT
> login: test
> passcode: test
> ^@
> CONNECTED
> session:ID:jacob-64807-1188509209664-4:3
> SUBSCRIBE
> destination: /queue/Prescriptions
> ack: client
> ^@
> This works and I receive the queued messages.
> They remain in the Q because I am not send ACK
> If I use the DISCONNECT command. I am properly disconnected and I can repeat 
> this process to get the same message again. Good.
> If I disconnect by killing the telnet process I see the following stack trace 
> in MQ. AND I can still repeat the same process of re-retrieving the 
> un-acknowledged messages:
>       DEBUG Transport                      - Transport failed: 
> java.io.EOFException
>       java.io.EOFException
>               at java.io.DataInputStream.readByte(DataInputStream.java:243)
>               at 
> org.apache.activemq.transport.stomp.StompWireFormat.readLine(StompWireFormat.java:186)
>               at 
> org.apache.activemq.transport.stomp.StompWireFormat.unmarshal(StompWireFormat.java:94)
>               at 
> org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:196)
>               at 
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:188)
>               at 
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:176)
>               at java.lang.Thread.run(Thread.java:613)
>       DEBUG TransportConnection            - Stopping connection: 
> /XXXXXXXXXXXXXX:4880
>       DEBUG TcpTransport                   - Stopping transport 
> tcp:///XXXXXXXXXXXXXX:4880
>       DEBUG TransportConnection            - Stopped connection: 
> /XXXXXXXXXXXXXX:4880
>       DEBUG TransportConnection            - Cleaning up connection 
> resources: /XXXXXXXXXXXXXX:4880
>       DEBUG AMQPersistenceAdapter          - Checkpoint started.
>       DEBUG AMQPersistenceAdapter          - Checkpoint done.
> HOWEVER,
> If I disconnect by repeatedly typing Control-C to close the telnet program I 
> see the following stack trace:
>       DEBUG Transport                      - Transport failed: 
> org.apache.activemq.transport.stomp.ProtocolException: Unable to parser 
> header line [????????????]
>       org.apache.activemq.transport.stomp.ProtocolException: Unable to parser 
> header line [????????????]
>               at 
> org.apache.activemq.transport.stomp.StompWireFormat.unmarshal(StompWireFormat.java:121)
>               at 
> org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:196)
>               at 
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:188)
>               at 
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:176)
>               at java.lang.Thread.run(Thread.java:613)
>       DEBUG TransportConnection            - Stopping connection: 
> /XXXXXXXXXXXXXX:64820
>       DEBUG TcpTransport                   - Stopping transport 
> tcp:///XXXXXXXXXXXXXX:64820
>       DEBUG AMQPersistenceAdapter          - Checkpoint started.
>       DEBUG AMQPersistenceAdapter          - Checkpoint done.
> AND, I am no longer able to retrieve the queued up messages.  Looking at the 
> admin console I see  Number Of Consumers  = 1, leading me to believe that 
> ActiveMQ didn't properly handle the disconnection.  In the other 2 cases 
> (DISCONNECT and kill) the "Number Of Consumers" drops to zero on connection 
> termination.
> I believe the correct behavior should be to properly handle and clean-up the 
> connection on bad data.  Or perhaps periodically check each of the supposed 
> "Consumers" to make sure that they are still alive.  This is clearly a 
> reproducible case of a DEAD Consumer that never gets cleaned up.
> Comparing the DEBUG output the follows the 2 stack traces, it is clear in the 
> second case that ActiveMQ fails to clean up the connections resources for the 
> unexpectedly disconnected consumer.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to