我正在使用两个队列以请求/响应模式使用 Azure 服务总线队列,一般来说它运行良好。我正在使用我发现的一些很好的示例中的非常简单的代码。我的队列介于 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
} );
什么会导致消息在设置过期后长时间保留在队列中?