У нас есть приложение pub/sub, в котором участвует внешний клиент, подписавшийся на издатель веб-роли через тему Azure Service Bus Topic. Наш текущий биллинговый цикл указывает, что мы отправили/получили> 25 тыс. Сообщений, а наша панель указала, что мы отправили < 100. Мы изучаем нашу реализацию и проверяем наши предположения, чтобы понять несоответствие.Azure Service Bus Подписчик регулярно звонит домой?
В рамках нашего расследования мы собрали провода для захвата клиента < => трафик служебной шины на клиентской машине. Мы заметили регулярную картину общения, которую мы не видели в документах и хотели бы лучше понять. Следующий обмен происходит один раз каждые 50 секунд, если в автобусе нет активности:
- Клиент нажимает ~ 200B на служебную шину.
- Спустя 10 лет служебная шина нажимает клиенту ~ 800B. Клиент регистрирует получение пустого сообщения (определяется с помощью точки останова.)
- Клиент немедленно отвечает, нажимая ~ 1000B на служебную шину.
Некоторые соответствующая информация:
- Это происходит, когда наш веб-роль не активно передавая данные на сервисной шине.
- После получения достоверного сообщения из роли в Интернете шаблон, описанный выше, не будет повторяться до тех пор, пока не пройдут полные 50 секунд.
- И клиент, и сервер подключаются к sb: // namespace .servicebus.windows.net через TCP.
- Наши сообщения приложения являются < 64 KB
Вопросы
- Что отвечает за регулярное, 3-пакетов обмена сообщениями мы наблюдаем? Это какая-то живая жизнь?
- Выполняет ли каждый из 3-х пакетов как отдельно оплачиваемое сообщение?
- Является ли это поведение настраиваемым или иным образом документированным?
EDIT:
Это кодирует принимают сообщения:
private void Listen()
{
_subscriptionClient.ReceiveAsync().ContinueWith(MessageReceived);
}
private void MessageReceived(Task<BrokeredMessage> task)
{
if (task.Status != TaskStatus.Faulted && task.Result != null)
{
task.Result.CompleteAsync();
// Do some things...
}
Listen();
}
Какой код вы используете для получения сообщений? В частности, вы используете OnMessage или цикл с собственным вызовом для получения? Если вы используете Receive, какая перегрузка вы используете? – MikeWo
Я добавил наш код получения на вопрос. Благодаря! –