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
当我想解码死信的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