2013-07-16 70 views
0

我正在与天青服务总线队列工作在使用两个队列的请求/响应模式和一般它运作良好后。我使用了我找到的一些很好的例子中非常简单的代码。我的队列在网络和工作者角色之间,使用MVC4,Visual Studio 2012和.NET 4.5。消息在天青服务总线队列保留在队列到期时间

在一些压力测试,我结束了我的过载系统和客户端放弃之前的一些响应不交付(我会解决,这个问题不是重点)。

发生这种情况时,我最终留在我的响应队列许多消息,都远远超过其ExpiresAtUtc时间。我的消息TimeToLive已设置5分钟。

当我在队列看看属性的消息是,它明确规定在过去的到期,用5分钟的传输TimeToLive。

创建队列,如果不与下面的代码存在的话:

namespaceManager.CreateQueue(
        new QueueDescription(RequestQueueName) 
        { 
         RequiresSession = true, 
         DefaultMessageTimeToLive = TimeSpan.FromMinutes(5) // messages expire if not handled within 5 minutes 
        }); 

什么会导致邮件留在不久后它被设置为过期队列?

回答

1

据我所知,没有后台进程清理这些,只有通过调用Receive来移动队列游标才会导致服务器跳过并处理过期的消息,并实际返回第一条未过期的消息或者全部过期的消息。

+0

那么这很有趣,而不是我所期望的。虽然我不断地在队列中收到新的回复,但如果它按照您的建议工作,应该清除已过期的邮件。我使用“AcceptMessageSessionAsync”接收会话消息。这可以忽略/跳过过期的消息吗?此外,我现在用的是服务总线资源管理器应用程序[链接](http://code.msdn.microsoft.com/windowsazure/Service-Bus-Explorer-f2abca5a)监视的队列,并选择接收所有邮件菜单项只拉来自队列的一条消息。 –

+0

伟大的问题,我不能肯定地说。据我所知,这种行为是无证的。不难想象,会话确实影响接收处理哪些消息。但最终,如果你实际上没有收到信息,你真的关心他们是否在那里?另一个建议可能是设置EnableDeadLetteringOnMessageExpiration = true,看看是否改变了行为,但是你有一个你需要倾向于自己的死信队列。 –

+0

感谢您的补充评论。在我的情况下,我确实在乎有消息堵塞队列,因为其中有许多有负载。最终我的队列将填满。我会试验死去的字母,看看会发生什么。 –

相关问题