Hi, I'm implementing the backoff logic using dead-letter-exchange mechanism and x-expires queues.
And sometimes queues close unexpectedly before the end of the expired period.
redelivered: false
exchange: amq.rabbitmq.event
routing_key: queue.created
properties:
timestamp: 1622461853 (2021-05-31T14:50:53.276000)
delivery_mode: 2
headers:
user_who_performed_action: admin
exclusive: false
owner_pid:
arguments: [
<<"x-expires">>,signedint,35000
<<"x-dead-letter-exchange">>,longstr,<<>>
]
auto_delete: false
durable: true
name: backoff--30000ms
vhost: /
timestamp_in_ms: 1622461853276 (2021-05-31T14:50:53.276000)
redelivered: false
exchange: amq.rabbitmq.event
routing_key: binding.created
properties:
timestamp: 1622461853 (2021-05-31T14:50:53.282000)
delivery_mode: 2
headers:
user_who_performed_action: admin
vhost: /
arguments: [
<<"backoff">>,signedint,30000
<<"x-match">>,longstr,<<"any">>
]
routing_key:
destination_kind: queue
destination_name: backoff--30000ms
source_kind: exchange
source_name: backoff
timestamp_in_ms: 1622461853282 (2021-05-31T14:50:53.282000)
Then message with expiration of 30000 ms published in exchange:
redelivered: false
exchange: amq.rabbitmq.trace
routing_key: publish.backoff
properties:
timestamp_in_ms: 1622461853289 (2021-05-31 14:50:53.289)
headers:
exchange_name: backoff
routing_keys: [
previous_queue
]
properties:
expiration: 30000
priority: 0
delivery_mode: 2
headers:
backoff: 30000
content_encoding: utf-8
content_type: application/json
node: rabbit
vhost: /
channel: 1
user: admin
routed_queues: [
backoff--30000ms
]
And finally after 24 seconds instead of 35 the queue was automatically deleted:
redelivered: false
exchange: amq.rabbitmq.event
routing_key: binding.deleted
properties:
timestamp: 1622461877 (2021-05-31T14:51:17.243000)
delivery_mode: 2
headers:
user_who_performed_action: rmq-internal
vhost: /
arguments: [
<<"backoff">>,signedint,30000
<<"x-match">>,longstr,<<"any">>
]
routing_key: "
destination_kind: queue
destination_name: backoff--30000ms
source_kind: exchange
source_name: backoff
timestamp_in_ms: 1622461877243 (2021-05-31T14:51:17.243000)
Queue deleted
redelivered: false
exchange: amq.rabbitmq.event
routing_key: queue.deleted
properties:
timestamp: 1622461877 (2021-05-31T14:51:17.243000)
delivery_mode: 2
headers:
user_who_performed_action: rmq-internal
name: backoff--30000ms
vhost: /
timestamp_in_ms: 1622461877243 (2021-05-31T14:51:17.243000)
Documentation says "The server guarantees that the queue will be deleted, if unused for at least the expiration period" but in my case it didn't work.
What am I doing wrong?
RabbitMQ 3.8.0
Erlang 22.1.2