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
                    } );

是什么原因导致消息在设置为过期后仍保留在队列中很长时间?

Azure服务总线队列中的消息在过期后仍保留在队列中

据我所知,没有后台进程清理这些消息,只有通过调用Receive向前移动队列光标的行为会导致服务器跳过并处理过期的消息,并实际返回第一条未过期的消息或如果所有消息都已过期则不返回。