如何将RabbitMQ Shovel配置为用当前时间覆盖timestamp属性?



例如:

{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用当前时间覆盖时间戳(例如当Shovel接收到消息并铲入目标队列时)。

不幸的是,在撰写本文时不可能以这种方式配置铲子。shovel配置,包括转发消息的publish_properties,在shovel工人启动时读取,并且只能包含静态内容。因此,无论您在{publish_properties, [{timestamp, TimeStamp}]}中输入什么值,都将直接传递给erlang-client,后者将尝试序列化这些值(使用amqp_帧层)。

我们目前正在计划对shovel插件进行一些改进(例如集群范围内的故障转移和动态重新配置),并且您不是第一个要求此功能的人,因此我们将考虑是否支持此处的特定内容(例如为每个处理的消息设置新的时间标记)或通用方法来配置shovel worker的运行时行为。

最新更新