簡體   English   中英

獲取 C# 中 rabbit Mq 中 xDeath 中隊列消息的最大重試次數

[英]Get max retry count for queue message in xDeath in rabbit Mq in C#

我想在 rabbit MQ 中實現 DLX,它設置失敗消息的重試計數。 如果重試次數大於 5,則消息將自動被丟棄。

下面是 DLX 的片段。

        string WORK_EXCHANGE = "DeadExchange"; // dead letter exchange
        string RETRY_QUEUE = "RetryQueue";
        int RETRY_DELAY = 10000;

        var queueArgs = new Dictionary<string, object> {
            { "x-dead-letter-exchange", WORK_EXCHANGE },
            { "x-message-ttl", RETRY_DELAY }
        };

        var properties = channel.CreateBasicProperties();
        properties.Persistent = true;

        channel.ExchangeDeclare(exchange: WORK_EXCHANGE,
                                type: ExchangeType.Direct);

        channel.QueueBind(queue: queueName, exchange: WORK_EXCHANGE, routingKey: routingKey, arguments: null);

        channel.ExchangeDeclare(exchange: RETRY_EXCHANGE,
                                type: ExchangeType.Direct);

        channel.QueueDeclare(queue: RETRY_QUEUE, durable: true, exclusive: false, autoDelete: false, arguments: queueArgs);
        channel.QueueBind(queue: RETRY_QUEUE, exchange: RETRY_EXCHANGE, routingKey: routingKey, arguments: null);
        channel.BasicPublish(exchange: RETRY_EXCHANGE, routingKey: routingKey, mandatory: true, basicProperties: properties, body: message);

我想讀取 x-Death 屬性,如下面的隊列消息所示。

到目前為止,我已經達到

(BasicDeliveryEventArgs)ea.BasicProperties.Headers["x-death"]

隊列消息屬性

您可以通過這種方式檢索計數:

    private long? GetRetryCount(IBasicProperties properties)
    {
        if (properties.Headers.ContainsKey("x-death"))
        {
            var deathProperties = (List<object>)properties.Headers["x-death"];
            var lastRetry = (Dictionary<string, object>)deathProperties[0];
            var count = lastRetry["count"];
            return (long)count;
        }
        else
        {
            return null;
        }
    }

我希望它對某人有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM