Azure服务总线队列中的消息在过期后仍保留在队列中
本文关键字:队列 过期 保留 服务 总线 Azure 消息 | 更新日期: 2023-09-27 18:23:41
我正在使用两个队列以请求/响应模式使用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
} );
是什么原因导致消息在设置为过期后仍保留在队列中很长时间?
据我所知,没有后台进程清理这些消息,只有通过调用Receive
向前移动队列光标的行为会导致服务器跳过并处理过期的消息,并实际返回第一条未过期的消息或如果所有消息都已过期则不返回。