Как настроить RabbitMQ Shovel для перезаписи свойства временной метки текущим временем?

Например:

{myshovel, [
    {sources, ...}
    , {destinations, ...}
    , {queue, <<>>}
    , {ack_mode, on_confirm}
    , {publish_properties, [
        {delivery_mode, 2}
        , {timestamp, now} % this is the line I need to understand how to write
    ]}
    , {publish_fields, [{exchange, <<"">>}, {routing_key, <<"">>}]}
    , {reconnect_delay, 5}
]}

Мне любопытно, как написать publish_properties таким образом, чтобы RabbitMQ Shovel перезаписывал отметку времени текущим временем (например, когда лопата получает сообщение и перемещает его в очередь назначения).


person dlamotte    schedule 22.04.2013    source источник


Ответы (1)


К сожалению, на момент написания статьи настроить лопату таким образом невозможно. Конфигурация shovel, включая publish_properties для пересылаемых сообщений, считывается при запуске shovel worker и может содержать только статический контент. Таким образом, любое значение, которое вы поместите в {publish_properties, [{timestamp, TimeStamp}]}, будет передано непосредственно erlang-клиенту, который, в свою очередь, попытается сериализовать их (используя слой кадрирования amqp_).

В настоящее время мы планируем некоторые улучшения плагина shovel (такие как отказоустойчивость всего кластера и динамическая реконфигурация), и вы не первый, кто просит об этой функции, поэтому мы рассмотрим, имеет ли смысл поддерживать здесь что-то конкретное. (например, установка новых временных меток для каждого обработанного сообщения) или общий подход к настройке поведения shovel worker во время выполнения.

person hyperthunk    schedule 23.04.2013
comment
Очень полезно, как я понял, но хотел убедиться. На данный момент я использую лопату через глобальную сеть, и мы пытаемся зафиксировать задержку между точками и предоставить метрики вокруг нее. Это было бы очень полезно. - person dlamotte; 23.04.2013