В настоящее время я разрабатываю приложение на Azure, которое использует Azure Event Hub. В основном я отправка сообщений (или я должен сказать, событий) к концентратору событий из веб-API, и у меня есть два слушателя:Должен ли я помещать свои события в очередь после получения их от Azure Event Hub?
- задача Стрим Analytics для анализа в реальном времени
- стандартный работник роль, которая вычисляет некоторые вещи на основе полученных событий, а затем сохраняет их в базе данных Azure SQL (это лямбда-архитектура).
В настоящее время я использую библиотеку EventProcessorHost для извлечения своих событий из Event Hub внутри моей рабочей роли.
Я пытаюсь найти некоторые рекомендации по использованию концентратора событий (немного сложнее использовать концентраторы событий, чем очереди служебных шин, то есть потоковая передача сообщений), и я обнаружил, что некоторые люди говорят I не должен делать много обработки после извлечения EventData
событий из моего Event Hub.
В частности:
Имейте в виду, вы хотите, чтобы все, что вы делаете относительно быстро - то есть не пытаются сделать многие процессы здесь - вот что такое группы потребителей .
Автор данной статьи добавил очередь между концентратором событий и работника роли (это не ясно из комментариев, если это действительно требуется или нет).
Так что вопрос: я должен делать всю обработку материала непосредственно после того, как концентратор событий (т.е. внутри ProcessEventsAsnyc
метода моей IEventProcessor
реализации), или я должен использовать очередь между концентратором события и обрабатывающий материал?
Любая рекомендация о том, как правильно потреблять события от концентратора событий, будет оценена, документация в настоящее время немного ... отсутствует.
Спасибо, очень полезный ответ. В качестве побочного примечания у меня на самом деле создается впечатление, что 'EventProcessorHost' еще не готово для развития производства. Существует мало или вообще отсутствует документация, и я недавно получил исключение «NullReferenceException» при вызове 'UnregisterEventProcessorAsync' (я никогда не получал такого исключения (которое подразумевает, что исключения не обрабатываются должным образом внутри) из BCL в течение лет разработки .Net) , Во всяком случае, большое спасибо. – ken2k
Это определенно не кажется идеальным, справедливо, что клиенты высокого уровня Kinesis и Kafka тоже не слишком совершенны. – cacsar