RabbitMQ C#:如何获取死信 queue header 属性(并对其进行解码)

RabbitMQ C#: How to get dead letter queue header properties (and decode them)

当我想解码死信的x-first-dead-queue 属性时,出现如下错误:

Argument 1: cannot convert from 'object' to 'byte[]'

这是在收到新死信时运行的代码:

consumer.Received += async (model, ea) =>
            {
                var body = ea.Body.ToArray();
                var message = Encoding.UTF8.GetString(body);

                var originalQueueHeader = ea.BasicProperties.Headers["x-first-death-queue"];
                var originalQueue = Encoding.UTF8.GetString(originalQueueHeader);
            };

消息解析良好,但 originalQueue 抛出 cannot convert from 'object' to 'byte[]' 错误。

为了解码消息,您需要将 object{byte[]} 转换为 byte[]

因此,例如,如果您想获得 x-first-dead-queue,您需要执行以下操作:

var originalQueueHeader = (byte[])ea.BasicProperties.Headers["x-first-death-queue"];

这样 object{byte[]} 将转换为 byte[]

要将字符串作为可读文本,请执行以下操作:

var originalQueue = Encoding.UTF8.GetString(originalQueueHeader);

可以对任何 header 执行此操作。如果你想这样做,例如一个数字 header (x-delivery-count),它很简单:

var deliveryCount = (long)ea.BasicProperties.Headers["x-delivery-count"];

它 returns deliveryCount