0

我正在使用两个队列以请求/响应模式使用 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
                    } );

什么会导致消息在设置过期后长时间保留在队列中?

4

1 回答 1

1

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

于 2013-07-16T21:18:42.683 回答