请指导我消费者怎么重新排队再处理。我的目标是重新请求消息,如果消息中有一个错误,然后消费者将尝试再次消费。让我们假设,如果我发送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);
}
};
1条答案
按热度按时间lymnna711#
在basicReject中发送requeue=true而不限制重试次数,因此消息将不间断地重新排队。
如果使用的是仲裁队列,则可以通过向队列添加
x-delivery-limit
参数来限制重试计数,如下所示如果你使用的是经典队列,或者你想实现一个完整的重试机制,包括死信,你可以阅读下面的文章:RabbitMQ Retries