2015-03-11 2 views
0

Я тестирую проект с мертвой буквой с помощью Microsoft Service Bus. Я отправляю 26 сообщений (представляющих алфавит), и я использую программу, которая при получении сообщений случайным образом помещает некоторые из них в очередь с мертвой буквой. Сообщения всегда читаются в режиме подглядывания из очереди мертвых букв, поэтому, как только они туда доберутся, они остаются там. После запуска несколько раз все 26 сообщений будут в очереди с мертвой буквой и всегда останутся там.brokeredmessage microsoft service bus queue ReceiveBatch не получает все сообщения о мертвой букве

Однако, при чтении их, иногда лишь несколько (например, 6) читаются, иногда все 26.

Я использую команду:

const int maxToRead = 200; // It seems one wants to set this higher than  
          // the anticipated load, obtaining only some back 
IEnumerable<BrokeredMessage> dlIE = 
      deadletterSubscriptionClient.ReceiveBatch(maxToRead); 

Там есть перегрузка ReceiveBatch, которая имеет тайм-аут, но это не помогает, и это просто добавляет сложности.

Почему он не получает все 26 сообщений каждый раз, так как он используется в режиме «peek» и сообщения остаются там.

Я могу использовать «Проводник служебных шин», чтобы убедиться, что все сообщения находятся в очереди с недопустимыми сообщениями и остаются там.

В основном это пример тестирования, но можно было бы надеяться, что «ReceiveBatch» будет работать в детерминированном режиме и не очень (плохой) случайным образом ...

+0

смотри также HTTP: // stackoverflow.com/questions/26862747/messagereceiver-receivebatch-not-working-as-intended не работает по назначению, если задан аналогичный вопрос – JosephDoggie

+0

Кто-нибудь знает, как сообщить об этой ошибке Microsoft; Я пробовал, но не смог найти доступную ссылку .... - – JosephDoggie

ответ

0

Это лишь частичный ответ, или работа -вокруг; следующий код надежно получает все элементы, но не использует «ReceiveBatch»; обратите внимание, насколько я могу различить, Peek (i) работает с одним индексом. Кроме того: в зависимости от того, какой сервер один работает на, если вы обвиняетесь притяжением сообщения, это может (или не может) быть более дорогими, так что используйте на свой страх и риск:

  List<BrokeredMessage> dlIE = new List<BrokeredMessage>(); 

      BrokeredMessage potentialMessage = null; 
      int loopCount = 1; 
      while ((potentialMessage = deadletterSubscriptionClient.Peek(loopCount)) != null) 
      { 
       dlIE.Add(potentialMessage); 
       loopCount++; 
      } 
+0

, если у кого-то есть лучший ответ на вопрос о том, как использовать ReceiveBatch напрямую, отправьте сообщение. – JosephDoggie

+0

Также жаль, что непросто сообщить, что, по-видимому, является настоящей ошибкой для Microsoft более очевидным, легким способом! – JosephDoggie

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

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