2014-12-11 07:17:29 -05:00
|
|
|
#Detecting Slow Consumers
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2015-03-03 11:12:34 -05:00
|
|
|
In this section we will discuss how Apache ActiveMQ can be configured to deal
|
2014-12-04 10:25:29 -05:00
|
|
|
with slow consumers. A slow consumer with a server-side queue (e.g. JMS
|
|
|
|
topic subscriber) can pose a significant problem for broker performance.
|
|
|
|
If messages build up in the consumer's server-side queue then memory
|
|
|
|
will begin filling up and the broker may enter paging mode which would
|
|
|
|
impact performance negatively. However, criteria can be set so that
|
|
|
|
consumers which don't acknowledge messages quickly enough can
|
|
|
|
potentially be disconnected from the broker which in the case of a
|
|
|
|
non-durable JMS subscriber would allow the broker to remove the
|
|
|
|
subscription and all of its messages freeing up valuable server
|
|
|
|
resources.
|
|
|
|
|
2014-12-11 07:17:29 -05:00
|
|
|
## Configuration required for detecting slow consumers
|
2014-12-04 10:25:29 -05:00
|
|
|
|
|
|
|
By default the server will not detect slow consumers. If slow consumer
|
2015-02-25 08:37:19 -05:00
|
|
|
detection is desired then see [queue attributes chapter](queue-attributes.md)
|
|
|
|
for more details.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
|
|
|
The calculation to determine whether or not a consumer is slow only
|
|
|
|
inspects the number of messages a particular consumer has
|
|
|
|
*acknowledged*. It doesn't take into account whether or not flow control
|
|
|
|
has been enabled on the consumer, whether or not the consumer is
|
|
|
|
streaming a large message, etc. Keep this in mind when configuring slow
|
|
|
|
consumer detection.
|
|
|
|
|
|
|
|
Please note that slow consumer checks are performed using the scheduled
|
|
|
|
thread pool and that each queue on the broker with slow consumer
|
|
|
|
detection enabled will cause a new entry in the internal
|
|
|
|
`java.util.concurrent.ScheduledThreadPoolExecutor` instance. If there
|
|
|
|
are a high number of queues and the `slow-consumer-check-period` is
|
|
|
|
relatively low then there may be delays in executing some of the checks.
|
|
|
|
However, this will not impact the accuracy of the calculations used by
|
|
|
|
the detection algorithm. See ? for more details about this pool.
|