2013-07-16 5 views
0

Я работаю с очередями шины обслуживания Azure в шаблоне запроса/ответа с использованием двух очередей и в целом работает хорошо. Я использую довольно простой код из нескольких хороших примеров, которые я нашел. Мои очереди находятся между ролями веб-и рабочих, используя MVC4, Visual Studio 2012 и .NET 4.5.Сообщения в очереди на служебную шину Azure остаются в очереди после истечения срока действия

Во время некоторых стресс-тестов я в конечном итоге перегружаю свою систему, и некоторые ответы не доставляются до того, как клиент сдастся (что я исправлю, а не вопрос этого вопроса).

Когда это произойдет, я получаю много сообщений, оставшихся в моей очереди ответов, все далеко за пределами их ExpiresAtUtc времени. Мое сообщение TimeToLive установлено на 5 минут.

Когда я смотрю на свойства сообщения, все еще находящегося в очереди, оно явно истекает в прошлом, а TimeToLive - 5 минут.

создать очереди, если они не существуют со следующим кодом:

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

Что бы вызвать сообщение остаться в очереди долго после того, как он истекает?

ответ

1

Как я понимаю, фоновый процесс не очищает их, только действие перемещения курсора вперед с вызовом на Receive приведет к тому, что сервер пропустит мимо и удалит сообщения, срок действия которых истек, и фактически вернуть первое сообщение, которое не истекло, или нет, если все истекло.

+0

Ну, это интересно и не совсем то, что я ожидал. Хотя я постоянно получаю новые ответы в очереди, которые должны очищать истекшие сообщения, если они работают, как вы предлагаете. Я получаю сообщения с сеансами, используя 'AcceptMessageSessionAsync'. Может ли это игнорировать/пропускать истекшие сообщения? Также я использую приложение проводника Bus Bus [ссылка] (http://code.msdn.microsoft.com/windowsazure/Service-Bus-Explorer-f2abca5a) для контроля очередей, а выбор пункта меню «Получить все сообщения» только тянет одно сообщение из очереди. –

+0

Большой вопрос, и я не могу сказать точно. Насколько я могу судить о поведении. Нетрудно представить, что сеансы действительно влияют на то, какие сообщения обрабатываются приемом. В конечном счете, хотя, если вы на самом деле не получаете сообщение, вам все равно, если они там? Еще одно предложение может состоять в том, чтобы установить EnableDeadLetteringOnMessageExpiration = true и посмотреть, изменит ли это поведение, но тогда у вас есть очередь с мертвой буквой, которую вам нужно будет проявлять к себе. –

+0

Спасибо за дополнительные комментарии. В моем случае мне все равно, что есть сообщения, забивающие очередь, так как многие из них имеют полезную нагрузку. В конце концов моя очередь заполнится. Я буду экспериментировать с мертвой надписью и посмотреть, что произойдет. –

 Смежные вопросы

  • Нет связанных вопросов^_^