我正在使用来自 RabbitMQ 队列的一些消息。
我对消息的使用可能不稳定,因此如果失败,我想重试。
我的处理程序代码看起来有点像这样
........
var handlers = new GetHandlers();
try
{
handlers.Handle<T>(output);
//log handled
}
catch (Exception ex)
{
//log fail
channel.BasicNack(ea.DeliveryTag, false, true);
return;
}
channel.BasicAck(ea.DeliveryTag, false);
// Log all good.
};
消息上有一个 Redelivered = true/false
属性,但是这并没有给我足够的信息来知道我之前见过该消息多少次。
有没有办法让 Rabbit 设置发送尝试的次数?
最佳答案
当前版本中没有。但是,您可以重新发布包含此信息作为标题的消息。或者,您可以使用某种分布式内存缓存(例如 memcached 或 Couchbase)来存储此状态信息。
从体系结构的角度来看,您的应用程序不应根据尝试消息的次数而表现出不同的行为。如果您的应用程序由于格式错误而无法处理它,则应立即拒绝它。如果存在临时情况,则在该情况解决之前不应使用消息。显然,每条规则都有异常(exception)。
关于c# - RabbitMQ 可以告诉我一条消息已传递了多少次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48991982/