Messages and queues disappear when trying to implement backoff logic

81 views
Skip to first unread message

wb77

unread,
Jun 2, 2021, 1:32:45 AM6/2/21
to rabbitmq-users
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.
I made inspection using `Event Exchange Plugin` and `Firehose` (amq.rabbitmq.event and amq.rabbitmq.trace exchanges).

I created header exchange:

    exchange: backoff
    type: headers

Then a queue with x-expires == 35000 is created and bound:

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: /
            connection: 127.0.0.1:59282 -> 127.0.0.1:5672
            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

Reply all
Reply to author
Forward
0 new messages