У меня есть менеджер событий, работающий в своем собственном узле Erlang. Я хотел бы использовать его как простой брокер событий и позволить другим приложениям на других узлах подписываться на него, добавляя свой собственный обработчик событий.Возможно ли добавить локальный обработчик событий в удаленный диспетчер событий
Моя установка тестирования выглядит так (извините страшная отступы)
При запуске этого я получаю сообщение об ошибке, как:
{'EXIT',{undef,[{event_handler_a,init,[[]],[]},
{gen_event,server_add_handler,4,
[{file,"gen_event.erl"},{line,429}]},
{gen_event,handle_msg,5,[{file,"gen_event.erl"},{line,270}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,247}]}]}}
Так что теперь, мне интересно, если я делаю что-то неправильно или если эта архитектура просто невозможна. Поскольку логика в обработчике событий полностью связана с моим приложением, я бы предпочел сохранить его в моей версии приложения. Наличие обработчика событий для каждого приложения внутри моей версии диспетчера событий, вероятно, скоро станет беспорядочным.
Я не знаю много о 'gen_event', но эта ошибка выглядит как' gen_event' попытался вызвать 'event_handler_a: INIT ([])' и что либо модуль или эта функция не была определена/загружена на этом узле Erlang. – Dogbert
@Dogbert Я забыл об этом. Если диспетчер событий вызывает обратный вызов init/1 из обработчика события, ему нужно будет указать имя узла. К сожалению, документ показывает 'add_handler (EventMgrRef, Handler, Args) -> Результат' с' Handler = Module | {Module, Id} ' – ITChap
Я думаю, вы можете передать это как' Args', поэтому 'gen_event: add_handler (_, _, node1 @ host1)'. – Dogbert