我正在使用两个队列以请求/响应模式使用Azure Service Bus Queues,并且通常它运行良好。我从一些我发现的好例子中使用了非常简单的代码。我的队列在Web和工作者角色之间,使用MVC4,Visual Studio 2012和.NET 4.5。
在一些压力测试期间,我最终超载了我的系统,并且在客户端放弃之前没有传递一些响应(我将修复,而不是这个问题的重点)。
当发生这种情况时,我最终会在响应队列中留下许多消息,这些消息都超出了ExpiresAtUtc
时间。我的消息TimeToLive
设置为5分钟。
当我查看仍在队列中的邮件的属性时,它显然已设置为过去,TimeToLive为5分钟。
如果队列不存在,我使用以下代码创建队列:
namespaceManager.CreateQueue(
new QueueDescription( RequestQueueName )
{
RequiresSession = true,
DefaultMessageTimeToLive = TimeSpan.FromMinutes( 5 ) // messages expire if not handled within 5 minutes
} );
什么会导致邮件在设置为过期后很久才会保留在队列中?
答案 0 :(得分:1)
据我所知,没有后台进程清理它们,只有通过调用Receive
向前移动队列光标的行为才会导致服务器跳过并处理已过期的消息实际上返回第一条未过期的消息,或者如果所有消息都过期则返回。