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

Error consuming large messages with AMQP and selector

XMLWordPrintable

    • False
    • None
    • False
    • Hide
      1. Deploy an AMQ cluster with two active nodes
      2. Both producer and consumer will use AMQP protocol.
      3. Run a client/consumer connected to a queue "testQueue" on broker node2. Additionally, the consumer defines a message selector "JMSCorrelationID=123456". The consumer will wait until a message is received.
      4. Run a client/producer connected to a queue "testQueue" on brokoer node1. The producer will send a LARGE message to the queue, and additionally set the JMSCorrelationID header to value "123456".

       

       

      Once the message is sent, the AMQ cluster will move the message from node1 to node2 (you can check the large message is now in node2 by using the web console and even looking into the large-messages directory on the disk), but the message is never consumed.

       

      Note: This test has been made with 7.9.4 version

      Show
      Deploy an AMQ cluster with two active nodes Both producer and consumer will use AMQP protocol. Run a client/consumer connected to a queue "testQueue" on broker node2. Additionally, the consumer defines a message selector "JMSCorrelationID=123456". The consumer will wait until a message is received. Run a client/producer connected to a queue "testQueue" on brokoer node1. The producer will send a LARGE message to the queue, and additionally set the JMSCorrelationID header to value "123456".     Once the message is sent, the AMQ cluster will move the message from node1 to node2 (you can check the large message is now in node2 by using the web console and even looking into the large-messages directory on the disk), but the message is never consumed.   Note: This test has been made with 7.9.4 version

      Large messages produced to a Queue using the AMQP protocol are not consumed under some specific conditions.

       

      If the consumer is connected to a different broker in the cluster where the message was initially sent, and that consumer defines a matching selector (by filtering a message header value), the cluster moves the message to that node where the consumer is connected (that's ok because the filter matches the header value), but then the message is stuck and never consumed.

       

      After doing some tests, the following list shows the conclusions:

       

      • If the large message is sent through AMQP to a node in the cluster (e.g. node1) and the consumer is connected to another node (e.g. node2) by defining a matching selector, the message is NOT consumed.
      • If the message is not "large", the message is consumed OK
      • If the consumer is connected to the same node where the large message was added, the bug never happens and the message is consumed OK.
      • If the consumer is connected to a different node in the cluster without defining a "selector", the large message is consumed OK
      • If the large message has been sent using a different protocol (only Openwire was tested), the message is consumed OK through the AMQP protocol (now we are mixing two protocols).

       

       

      The header used for the selector in the consumer code was "JMSCorrelationID" (which is a standard header set by the Message.setJMSCorrelationID() method on the producer side).

       

      Other headers or custom properties were not tested.

              dbruscin Domenico Francesco Bruscino
              ajimenme Alberto Jimenez Melero (Inactive)
              Dominik Lenosi Dominik Lenosi (Inactive)
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: