Set RabbitMQ message TTL and queue expiry

Following ideas here:
https://wiki.openstack.org/wiki/Large_Scale_Configuration_Rabbit

Make sure old messages with no consumer are dropped after the message
TTL of 10 mins, longer than the 1 min RPC timeout.
Also ensure queues expire after an hour of inactivity, so queues from
removed nodes or renamed nodes don't grow over time.

Change-Id: Ifb28ac68b6328adb604a7474d01e5f7a47b2e788
This commit is contained in:
John Garbutt 2021-12-17 18:16:23 +00:00 committed by Matt Crees
parent dae2cbca30
commit fd30dfb867
2 changed files with 16 additions and 2 deletions

View File

@ -100,9 +100,11 @@ rabbitmq_ha_promote_on_shutdown:
rabbitmq_server_count: "{{ groups[role_rabbitmq_groups] | length }}"
rabbitmq_ha_replica_count: "{{ (rabbitmq_server_count | int // 2 + 1) }}"
# If no TTL is specified, messages will not expire
rabbitmq_message_ttl_ms:
# Set max message ttl to 10 mins (more than 1 min rpc timeout)
# so we don't have queues with no consumers growing unbounded
rabbitmq_message_ttl_ms: 600000
# If no queue expiry is specified, queues will not expire
rabbitmq_queue_expiry_ms:
rabbitmq_queue_expiry_ms: 3600000
rabbitmq_extra_config: {}
####################

View File

@ -0,0 +1,12 @@
---
upgrade:
- |
In RabbitMQ, messages now have a TTL of 10 minutes and inactive queues will
expire after 1 hour. These queue arguments can be changed dynamically at
runtime [1], but it should be noted that applying a TTL to queues which
already have messages will discard the messages when specific events occur.
See [2] for more details. Note that the contents of the RabbitMQ
definitions.json are now changed, meaning RabbitMQ containers will be
restarted on next deploy/upgrade.
[1] https://www.rabbitmq.com/queues.html#optional-arguments
[2] https://www.rabbitmq.com/ttl.html#per-message-ttl-caveats