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

tzdcorbm  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(209)

当我想解码死信的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[]'错误。

af7jpaap

af7jpaap1#

为了对消息进行解码,需要将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);

这可以在任何一个头文件上实现。如果你想在一个数字头文件(x-delivery-count)上实现,那么就像下面这样简单:

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

然后返回deliveryCount

相关问题