Почему EventHubClient.SendBatch() поддерживает только один раздел?

Очевидно (на основании исключения) EventHubClient.SendBatch и EventHubClient.SendBatchAsync поддерживает отправку только в один раздел за операцию. Похоже, что это указано в документации в сводке метода «Отправляет пакет данных о событии в логический раздел, представленный PartitionId», который, по-видимому, копируется из конкретного раздела EventHubSender.SendBatch.

Существуют ли соображения дизайна (по сравнению с просто написанием меньшего количества кода) в том, что клиент более высокого уровня не выполняет повторную пакетную обработку по мере необходимости? EventHubClient имеет контроль над хешированием/распределением ключа раздела, что недоступно вызывающим сторонам EventHubClient, которые хотят отправить пакет данных с разными ключами, которые могут находиться в одном разделе. Осталось перекомпоновать себя. Мне нужно совершать вызовы по порядку количества сообщений, а не по количеству разделов, которые с небольшими сообщениями легко отличаются на два порядка.

Поскольку уже необходимо повторно могло быть и хуже.


person cacsar    schedule 20.01.2015    source источник


Ответы (1)


Я предполагал, что PartitionKey в ваших объектах EventData пакета будет использоваться для разделения. Но видимо нет. Однако есть Паоло Сальватори, который написал хороший набор методов расширения, чтобы обеспечить хорошую и простую поддержку пакетной отправки в концентратор событий. Вам, вероятно, понравится его сообщение здесь: http://blogs.msdn.com/b/paolos/archive/2015/03/26/how-to-implement-a-partitioned-sendbatch-method-for-azure-service-bus-entities.aspx

С наилучшими пожеланиями

person Sam Vanhoutte    schedule 31.03.2015
comment
Да, этот код похож на то, что я написал (но не поделился) в результате stackoverflow.com/questions/27263189/ , хотя SerializedSize в байтах был добавлен позже. По крайней мере, он явно указывает, что пакетная обработка поддерживает только EventData с тем же ключом раздела. - person cacsar; 31.03.2015