从 MassTransit 消费者访问 RabbitMQ 消息头

问题描述 投票:0回答:1

有没有办法从 RabbitMQ 获取消息标头(与通过 MassTransit 设置的标头不同)?
我的用例是,我正在尝试读取 RabbitMQ 添加的 timestamp

timestamp_in_ms
(之前由 RabbitMQ 插件生成,现在通过配置原生)。
我已经检查了文档并进行了调试,但在我收到的内容中找不到任何 RabbitMQ 标头密钥。 我知道 MassTransit 在消息信封上添加了自己的“SentTime”,但我相信这与 RabbitMQ 本身填写的
timestamp
不同(带有代理的服务器本地时间)。

.net rabbitmq masstransit
1个回答
0
投票

您可以使用以下方法从消费者的

Consume
方法中访问任何传输标头(包括 RabbitMQ):

if (context.ReceiveContext.TransportHeaders.TryGetHeader("timestamp_in_ms", out object timestampHeader))
{
    if(timestampHeader is AmqpTimestamp ts)
    {
        var dateTime = DateTimeConstants.Epoch + TimeSpan.FromMilliseconds(ts.UnixTime);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.