MassTransit в служебной шине Azure выдает исключение MessageSizeExceededException.

Я использую MassTransit для отправки и получения команд микросервиса. Он отправляет и получает нормально, когда я запускаю его локально (удаленное подключение к экземпляру служебной шины Azure). Например. Я отправляю команду из локального консольного приложения в удаленную очередь ServiceBus (которую я вижу в Service Bus Explorer 3.0.4), а затем моя локальная служба TopShelf получает и обрабатывает команду. Но когда я развертываю свою службу, происходит сбой со следующей ошибкой:

Microsoft.ServiceBus.Messaging.MessageSizeExceededException: The received message (delivery-id:0, size:1904586 bytes) exceeds the limit (262144 bytes) currently allowed on the link.

Я отправляю только одно сообщение, и оно довольно большое, но не 1,8 МБ, как указано в сообщении об ошибке! Его размер чуть больше 100 КБ.

Я нашел это сообщение о партии разделение сообщений, но мне это кажется актуальным только в том случае, если вы хотите разделить несколько сообщений на более мелкие группы сообщений. Я отправляю только одно сообщение. Кроме того, я не могу найти в MassTransit никакой документации о том, как это сделать. Я пробовал установить IServiceBusHostConfigurator вот так: cfg.BatchFlushInterval = TimeSpan.FromSeconds(0.05);

  1. Может кто-нибудь объяснить, почему он считает, что мои сообщения намного крупнее?
  2. Могу ли я разбить отдельное сообщение на более мелкие разделы? Или есть другое решение?
  3. Стоит ли вообще отключить разбиение на разделы? Если да, то как?

person hofnarwillie    schedule 08.09.2016    source источник


Ответы (1)


Служебная шина имеет ограничение в 256 КБ для сообщения, включая конверт сериализации, окружающий само тело сообщения. Если вы видите сообщение об ошибке размером 1,9 МБ, вы явно отправляете довольно большое сообщение.

Присмотритесь к размеру сообщения более внимательно, и если у вас есть вложения или двоичные данные в сообщении, подумайте об использовании функции MessageData<> для отправки двоичных полезных данных по внеполосному каналу.

person Chris Patterson    schedule 11.09.2016
comment
Спасибо. Используя Service Bus Explorer для просмотра сообщения, в нем говорится, что его размер равен 106330. Я предполагаю, что это относится к байтам, потому что при проверке размера тела JSON он немного меньше этого (что коррелирует с ожидаемым размером, включая конверт ). Так что мой вопрос все еще в силе, почему он может подумать, что сообщение составляет 1,9 МБ? Нет вложений и двоичных данных. - person hofnarwillie; 12.09.2016
comment
Мне это кажется странным, я знаю, что у нас есть много служб, работающих в Azure, таких как облачные службы, которые отлично работают с служебной шиной в Azure. - person Chris Patterson; 12.09.2016