Uploaded image for project: 'AMQ Broker'
  1. AMQ Broker
  2. ENTMQBR-72

Unable to consume from queue if the previous consumer did not exit cleanly

XMLWordPrintable

    • Hide

      1. run a receiver client on jms.queue.test and exit non-cleanly (use ^C to exit or kill the client)
      2. send a message to the jms.queue.test
      3. try to receive the message from jms.queue.test
      4. message can't be received
      5. wait ~60 seconds
      6. try to receive the message again
      7. message received

      Show
      1. run a receiver client on jms.queue.test and exit non-cleanly (use ^C to exit or kill the client) 2. send a message to the jms.queue.test 3. try to receive the message from jms.queue.test 4. message can't be received 5. wait ~60 seconds 6. try to receive the message again 7. message received

      If the receiver on a queue do not exit cleanly other clients are blocked to receive messages from that queue.

      It seems that there is an clean-up issue after non-clean exit of a consumer that leads to that other consumers are blocked to receive messages from that queue for ~40-60 seconds. It may be considered as a DoS issue.

      This applies to all proton clients (qpid-jms, python-proton, qpid-cpp).

      1. send a message to a queue
      ./aac1_sender.java.sh --log-msgs dict --broker localhost:5672 --address jms.queue.interoperability --count 1 --msg-content test
      2. receive the message
      ./aac1_receiver.java.sh --timeout 10 --log-msgs dict --broker localhost:5672 --address jms.queue.interoperability --count 1
      3. message received, everything is ok so far
      4. run the receiver again
      5. as there are no message to be consumed use ^C to end the client (or kill the client)
      6. send another message to that queue
      ./aac1_sender.java.sh --log-msgs dict --broker localhost:5672 --address jms.queue.interoperability --count 1 --msg-content test
      7. try to consume that message
      clients/aac1_receiver.java.sh --timeout 10 --log-msgs dict --broker localhost:5672 --address jms.queue.interoperability --count 1
      8. message can't be consumed
      9. run the receiver again, this time with higher time-out
      ./aac1_receiver.java.sh --timeout 60 --log-msgs dict --broker localhost:5672 --address jms.queue.interoperability --count 1
      10. message is consumed after ~40-60 seconds
      11. the receiver on that queue was blocked for unreasonable amount of time due to the previous client that doesn't exit cleanly.

        1. ENTMQ-1701-broker.log
          65 kB
          Petr Matousek
        2. ENTMQ-1701-terminal-transcript.txt
          7 kB
          Petr Matousek

              csuconic@redhat.com Clebert Suconic
              pematous Petr Matousek
              Petr Matousek Petr Matousek
              Votes:
              0 Vote for this issue
              Watchers:
              9 Start watching this issue

                Created:
                Updated:
                Resolved: