C# RabbitMQ能告诉我一条消息被传递了多少次吗?
我正在使用RabbitMQ队列中的一些消息 我对消息的消耗可能会很小,因此如果失败,我希望重试 我的处理程序代码看起来有点像这样C# RabbitMQ能告诉我一条消息被传递了多少次吗?,c#,rabbitmq,message-queue,C#,Rabbitmq,Message Queue,我正在使用RabbitMQ队列中的一些消息 我对消息的消耗可能会很小,因此如果失败,我希望重试 我的处理程序代码看起来有点像这样 ........ var handlers = new GetHandlers(); try { handlers.Handle<T>(output); //log handled
........
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.
};
。。。。。。。。
var handlers=new GetHandlers();
尝试
{
句柄(输出);
//原木处理
}
捕获(例外情况除外)
{
//日志失败
channel.BasicNack(ea.DeliveryTag,false,true);
返回;
}
channel.BasicAck(ea.DeliveryTag,false);
//日志都很好。
};
消息上有一个Redelivered=true/false
属性,但是该属性不能提供足够的信息,让我知道我以前见过此消息多少次
有没有办法让Rabbit设置发送尝试的次数?当前版本中没有。但是,您可以将此信息作为标题重新发布邮件。或者,您可以使用某种分布式内存缓存(想想memcached或Couchbase)来存储此状态信息
从体系结构的角度来看,应用程序的行为不应因消息的尝试次数而异。如果您的应用程序由于格式错误而无法处理它,它应该立即拒绝它。如果存在临时条件,则在该条件得到解决之前,不应使用消息。显然,每一条规则都有例外 这方面存在一个未决问题:。所以我要说不-在当前版本中是不可能的。