Отправка 1000 сообщений через посредника в служебную шину с помощью метода SendBatchAsync.

У меня есть приложение, в котором данные извлекаются из базы данных SQL и отправляются на служебную шину в виде брокерского сообщения. Вот шаги:

  1. Данные извлекаются из БД (пакетами по 1000)
  2. Каждая строка данных преобразуется в Брокерское сообщение и добавляется в список.
  3. Список из 1000 сообщений через посредника отправляется на служебную шину с помощью метода SendBatchAsync.

Именно на 3-м шаге я столкнулся с проблемой. Это код для этого:

public async Task SendMessagesAsync(List<BrokeredMessage> brokeredMessageList)
        {
            try
            {
                var topicClient = CreateTopicClient();
                await topicClient.SendBatchAsync(brokeredMessageList);
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

когда компилятор приходит к методу SendBatchAsync, он выдает ошибку Ошибка при обмене данными с служебной шиной. Проверьте информацию о подключении и повторите попытку. с внутренним исключением:

Internal Server Error: The server did not provide a meaningful reply; this might be caused by a premature session shutdown. TrackingId:some guid here

Однако, если я пытаюсь отправить 100 сообщений, все работает нормально. Что я могу сделать, чтобы он отправлял 1000 сообщений за раз?

Примечание: размер каждого сообщения составляет 1445 байт.


person nitinvertigo    schedule 25.06.2015    source источник


Ответы (2)


К сожалению, вы не можете, потому что ваш общий размер полезной нагрузки составляет около 1,4 МБ (1445 байт * 1000), тогда как максимальный разрешенный размер пакета составляет 256 КБ.

Ссылка: https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.topicclient.sendbatch.aspx (раздел «Примечания»)

Максимальный размер пакета равен максимальному размеру одного сообщения (в настоящее время 256 КБ).

Я предполагаю, что вам нужно будет разделить пакет на более мелкие пакеты, чтобы вы не превышали лимит в 256 КБ.

person Gaurav Mantri    schedule 25.06.2015
comment
Да, оказывается, так... Спасибо за разъяснение. - person nitinvertigo; 25.06.2015

Вы можете использовать пространство имен премиум-класса в служебной шине Azure. Это позволяет сообщения до 1 МБ. Хотя заголовок по-прежнему ограничен 64K.

PS. Прежде чем использовать премиум-пространство имен, проверьте цены.

Для получения дополнительной информации ->

https://blogs.msdn.microsoft.com/servicebus/2016/07/07/things-to-know-about-premium-messaging/

person lostintranslation    schedule 18.05.2017