2017-08-28 22:36:10 -04:00
|
|
|
# Detecting Slow Consumers
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2015-04-27 17:32:30 -04:00
|
|
|
In this section we will discuss how Apache ActiveMQ Artemis 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
|
2021-11-25 10:29:40 -05:00
|
|
|
potentially be disconnected from the broker, which in the case of a
|
|
|
|
non-durable JMS subscriber, would allow the broker to remove the
|
2014-12-04 10:25:29 -05:00
|
|
|
subscription and all of its messages freeing up valuable server
|
|
|
|
resources.
|
|
|
|
|
2018-03-08 15:46:38 -05:00
|
|
|
## Required Configuration
|
2014-12-04 10:25:29 -05:00
|
|
|
|
|
|
|
By default the server will not detect slow consumers. If slow consumer
|
2017-10-24 15:20:37 -04:00
|
|
|
detection is desired then see [address model chapter](address-model.md)
|
|
|
|
for more details on the required address settings.
|
2014-12-04 10:25:29 -05:00
|
|
|
|
2017-03-10 09:14:58 -05:00
|
|
|
The calculation to determine whether or not a consumer is slow only
|
|
|
|
inspects the number of messages a particular consumer has
|
2014-12-04 10:25:29 -05:00
|
|
|
*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
|
2015-03-24 07:50:58 -04:00
|
|
|
the detection algorithm. See [thread pooling](thread-pooling.md) for more details about this pool.
|
2017-10-24 15:20:37 -04:00
|
|
|
|
|
|
|
## Example
|
|
|
|
|
2018-03-09 10:07:38 -05:00
|
|
|
See the [slow consumer example](examples.md#slow-consumer) which shows how to detect a slow consumer
|
2017-10-24 15:20:37 -04:00
|
|
|
with Apache ActiveMQ Artemis.
|