-
Bug
-
Resolution: Unresolved
-
Major
-
None
-
None
-
None
-
1
-
False
-
-
False
-
-
-
-
-
-
-
The consumers show negative credits (close to Integer.MAX_VALUE) even though the consumerWindowSize is set to 0.
The following output shows that no messages are getting delivered despite the queue having several pending messages.
{ server = { queue = jms.queue.SomeQueue, messageCount = 234, Consumer with credits -2147420211 is delivering = 0, Consumer with credits -2147444004 is delivering = 0, Consumer with credits -2147382789 is delivering = 0, Consumer with credits -2147481980 is delivering = 0, Consumer with credits -2147423831 is delivering = 0, Consumer with credits -2147414127 is delivering = 0, Consumer with credits -2147457658 is delivering = 0, Consumer with credits -2147448987 is delivering = 0, Consumer with credits -2147437301 is delivering = 0, Consumer with credits -2147444717 is delivering = 0 }, Consumer# = ClientConsumer.buffer.size, client = { Consumer1 = 0, Consumer2 = 0, Consumer3 = 0, Consumer4 = 0, Consumer5 = 0, Consumer6 = 0, Consumer7 = 0, Consumer8 = 0, Consumer9 = 0, Consumer10 = 0 } }
VisualVM OQL script that fetched this data in the heap dump.
var server = {}; var client = {}; var globalValue = {}; heap.forEachObject( function(strObject) { var key = strObject.deliveringRefs.elements if (strObject.messageQueue.name.str.toString() == 'jms.queue.SomeQueue') { server['queue'] = strObject.messageQueue.name.str.toString(); server['messageCount'] = strObject.messageQueue.pendingMetrics.messageCount; key = parse(strObject,key) Object.keys(key).forEach(function(xx){ var count = key[xx]; server[xx] = count ? count : 0; }); } }, "org.apache.activemq.artemis.core.server.impl.ServerConsumerImpl", true ); function parse(strObject,inputArray) { var count = 0; var map = {}; for (var i=0; i<inputArray.length; i++) { if (inputArray[i] != null) { count++; } } map['Consumer with credits '+strObject.availableCredits.value +' is delivering']=count; return map; } var x = 1; heap.forEachObject( function(clientObject) { if (clientObject.queueName.str.toString() == 'jms.queue.SomeQueue') { client['Consumer'+x]=clientObject.buffer.size; x++; } }, "org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl", true); globalValue['server']=server // Headers globalValue['Consumer#']='ClientConsumer.buffer.size' globalValue['client']=client globalValue
The workaround is to not compress largeMessages or just restart the consumer.
- incorporates
-
ENTMQBR-9922 Compressed large messages overflow consumer credits.
-
- Dev Complete
-
- is blocked by
-
JBEAP-30987 [GSS](8.1.z) Compressed large messages overflow consumer credits.
-
- New
-
- is cloned by
-
JBEAP-30987 [GSS](8.1.z) Compressed large messages overflow consumer credits.
-
- New
-