我正在使用来自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设置传递尝试次数?
答案 0 :(得分:1)
不在当前版本中。但是,您可以将此信息作为标题重新发布。或者,您可以使用某种分布式内存缓存(想想memcached或Couchbase)来存储此状态信息。
从架构的角度来看,您的应用程序的行为应该不同,具体取决于尝试消息的次数。如果您的应用由于格式错误而无法处理,则应立即拒绝该应用。如果存在临时条件,则在该条件解决之前不应使用消息。显然,每条规则都有例外。