RabbitMQ - ReQueue the Message in C#

bqf10yzr  于 2023-06-23  发布在  RabbitMQ
关注(0)|答案(1)|浏览(114)

请指导我消费者怎么重新排队再处理。我的目标是重新请求消息,如果消息中有一个错误,然后消费者将尝试再次消费。让我们假设,如果我发送messahe到数据库,并将返回一个error.in这种情况下,我可以能够发送的消息,为requeing和再处理。
如果我拒绝消息,它会继续处理相同的消息,而不转到下一个消息。在我的情况下,我拒绝4,但它没有前进到处理5。
一二三四四四四
consumer.Received +=(sender,args)=> {

//Task.Delay(TimeSpan.FromSeconds(1)).Wait();

var body = args.Body.ToArray();
var message = Encoding.UTF8.GetString(body);

//send message to database at this level
Console.WriteLine($"Message received by receiver1: {message}");

if (Convert.ToInt32(message) == 4)
{
    channel.BasicReject(args.DeliveryTag,true);

}
else
{
    channel.BasicAck(args.DeliveryTag, false);
}

};

lymnna71

lymnna711#

在basicReject中发送requeue=true而不限制重试次数,因此消息将不间断地重新排队。
如果使用的是仲裁队列,则可以通过向队列添加x-delivery-limit参数来限制重试计数,如下所示

var queueArgs = new Dictionary<string, object>();
 queueArgs.Add("x-delivery-limit", QUEUE_DELIVERY_COUNT);

  _channel.QueueDeclare(queueName, durable, false, false, queueArgs);queueArgs);

如果你使用的是经典队列,或者你想实现一个完整的重试机制,包括死信,你可以阅读下面的文章:RabbitMQ Retries

相关问题