Kafka предоставляет функцию, с помощью которой мы можем указать размер партии производителя. Это размер сообщений, которые могут быть отправлены в очередь одновременно. Преимущество в том, что мы можем уменьшить количество сетевых вызовов в очереди. Есть ли у нас что-нибудь подобное в Service Bus? Единственная пакетная обработка, которую выполняет служебная шина, — это доставка сообщения в очередь. Но это не уменьшает количество выполняемых вызовов ввода-вывода.
Целью здесь является пакетная обработка сообщений, отправляемых производителем в очередь служебной шины, чтобы уменьшить количество сетевых вызовов.





С помощью .NET SDK вы можете создавать ServiceBusMessageBatch. При создании пакета можно передать его CreateMessageBatchOptions, чтобы указать максимальный размер пакета. Например
var options = new CreateMessageBatchOptions { MaxSizeInBytes = 1_024 };
using var messageBatch = await sender.CreateMessageBatchAsync();
Создаст пакет размером до 1024 байт. Если не указано иное, по умолчанию пакет будет иметь максимальный размер сообщения для используемого уровня пространства имен: 256 КБ для стандартного и 100 МБ для премиум-класса.
Я пытаюсь понять, если у меня размер сообщения 100 МБ, я смогу иметь в пакете только одно сообщение?
Что делать, если у меня нет всех сообщений заранее? Что, если я получаю сообщения одно за другим? Kafka Producer, кажется, буферизует и отправляет одновременно? Получим ли мы такое же поведение в случае клиента служебной шины?
Вы можете хранить свой пакетный объект до тех пор, пока не будете готовы его отправить.
Буферизация Kafka неявно реализована внутри клиента. Пакеты служебной шины являются явными. Это не одно и то же, и Service Bus не предлагает эквивалента. Как упомянул Шон, для «у нас нет всех сообщений» вашему приложению необходимо будет создать пакет и хранить его в памяти до тех пор, пока он не заполнится или пока вы не захотите отправить.
Какой язык программирования вы используете? Вот пример для Python stackoverflow.com/questions/68639192/… , для API для остальных Learn.microsoft.com/en-us/rest/api/servicebus/… и для .NET Learn. microsoft.com/en-us/azure/service-bus-messaging/…