В настоящее время я работаю над проектом конвейера данных, использующим Apache Kafka и Erlang в качестве языка потокового процессора (у меня фактически нет предыдущего опыта работы с erlang, кроме изучения языка и концепций с начала года). Чтобы писать потребителям Kafka, мы опираемся на модуль rock solid brod .
Я понимаю, что мне нужно написать модуль обратного вызова супервизора, который отвечает за запуск моего brod_client и моего модуля group_consumer.
my_app
+-- my_sup
+-- brod_client
+-- my_group_consumer
этот модуль group_consumer, который я написал, является модулем обратного вызова для Поведение brod_group_subsriber_v2, которое само по себе является модулем обратного вызова для gen_server.
my_group_consumer > brod_group_subscriber > gen_server
Когда я запускаю свое приложение, мой супервизор запускает brod_client, но не мой потребитель erlang:whereis(my_group_consumer).
возвращает undefined
. Только после того, как сообщение достигло, сам brod_group_consumer_v2, кажется, оживляет my_group_consumer и вызывает его функцию-обработчик сообщений. Этот "ленивый" init имеет смысл для меня, но отличается от того, что я ожидал, так как я настроил супервизор для явной заботы о my_group_consumer (не его базовом поведении).
Так что после всего этого я не уверен, если Я точно понимаю поведение, и поэтому, если я правильно использую модули brod, я пытаюсь наследовать их, как если бы я наследовал класс Java и полиморфизм.
Очень трудно найти примеры, когда brod используется в супервизоре, а не только в оболочке для демонстрационных целей.
РЕДАКТИРОВАТЬ: я использую brod в качестве примера ситуации / использования здесь, где я ожидал, что реализация наиболее специализированного модуля "унаследует" от mst generi c, который не кажется и поэтому я не могу правильно использовать такой модуль, как Брод.
Может, кто-нибудь объяснит мне различия в понятиях? Если вы хотите объяснить это в соответствии с моим примером, было бы здорово, если бы вы могли объяснить это другим примером или вообще без примера ... также хорошо, заранее спасибо.