[英]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.