#azure #azureservicebus #amqp
#azure #azureservicebus #amqp
Вопрос:
Служебная шина Azure имеет функцию «пакетной обработки на стороне клиента» (реализована протоколами AMQP и SBMP). Я читаю, что говорится об этом в документации. Это довольно смелое утверждение: (выделение мое)
Нет риска потери сообщений при пакетной обработке, даже если в конце интервала пакетной обработки 20 мс произошел сбой служебной шины.
Как это может быть правдой? Если бы сообщения отправлялись синхронно, я бы знал, что после возврата метода «отправить» сообщение уже находится на шине, и мне больше не нужно беспокоиться об этом. Но если целью пакетной обработки на стороне клиента является задержка отправки сообщения на 20 мс после возврата метода, чтобы последующие вызовы этого метода могли добавлять сообщения в тот же пакет, то, по крайней мере, на мой взгляд, наверняка должен быть риск того, что что-то плохое может произойти в течение этих 20 мс и вся партия будет потеряна.
Единственный возможный обходной путь, о котором я могу подумать, — это если пакетная обработка произошла на сервере, но тогда эта функция не будет называться пакетной обработкой на стороне клиента.
Верно ли это утверждение? Я неправильно понимаю это предложение или то, для чего предназначена пакетная обработка на стороне клиента? Или умные люди в Microsoft придумали техническое решение, которое мне не пришло в голову?
Комментарии:
1. Это не похоже на то, что сообщество SO может решить, поэтому я возобновил обращение в службу поддержки Azure.
2. На самом деле у меня есть теория, я думаю, наиболее вероятным объяснением является то, что задача будет выполнена только после отправки пакета, но параллельные задачи могут быть объединены. Что сделало бы вдвойне важным использование таких методов, как Задача. WhenAll для операций ASB. Я могу подтвердить это экспериментально, но мне нужно найти минутку.
Ответ №1:
Примечание, на которое вы ссылаетесь, находится в разделе Batching store access
, в котором говорится о пакетной обработке на стороне службы, а не на клиенте.