Я использую Azure EventHub для потоковой передачи данных устройств, и я хочу, чтобы каждый
Данные устройства будут отправлены в тот же раздел.
Поток отправляет данные в iot hub, где каждое устройство имеет свой собственный ключ раздела, и отправляет их в eventhub с тем же ключом раздела, что и ключ раздела iot hub (они имеют одинаковое количество разделов).
Я попытался установить свойство eventdata.partitionkey равным ключу раздела iothub, но теперь я понимаю, что это свойство является хеш-значением, и если я устанавливаю параметр keykey = 1, он не обязательно перейдет к разделу 1.
И с этим решением распределение разделов eventhub довольно плохо (половина разделов вообще не получает никаких данных).
Я также пытался использовать CreatePartitionedSender, который дает результат, но каждый раз, когда я создаю отправителя раздела, это похоже на создание клиента EventHub, и я получаю сообщение о количестве соединений (количество соединений AMQP на ограничение пространства имен).
Какое будет лучшее решение:
- Напишите фабричный класс (фабрика уже написана?) Для PartitionSender, поэтому у меня будет 1 клиент для каждого раздела, и мне придется обрабатывать состояние и, возможно, некоторый параллелизм.
- Работа со свойством eventdata.partitionkey и установка лучшего хеш-значения (может быть, идентификатор устройства вместо номера раздела), и мне не нужно писать что-либо дополнительное или обрабатывать ошибки соединения.
Или, может быть, есть лучшее решение?
Обновление:
Я попытался установить для eventdata.partitionkey идентификатор устройства, но я получил ошибку «Все данные события в операции SendBatch должны иметь один и тот же ключ раздела».
Так что это плохое решение, так как, если я разделю каждую отправку по ключу раздела
У меня будет много операций отправки маленьких кусочков вместо 1
.
Спасибо.