Ich habe einen Event-Manager in einem eigenen Erlang-Knoten ausgeführt. Ich möchte es als einen einfachen Ereignisbroker verwenden und andere Anwendungen auf anderen Knoten zulassen, indem Sie ihren eigenen Ereignishandler hinzufügen.Ist es möglich, einen lokalen Event-Handler zu einem Remote-Event-Manager hinzuzufügen
Mein Test-Setup sieht wie folgt aus (sorry die schreckliche Einbuchtung)
Wenn diese läuft ich einen Fehler wie:
{'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}]}]}}
So, jetzt frage ich mich, wenn ich etwas falsch tue oder wenn diese Architektur einfach nicht möglich ist. Da die Logik in meinem Event-Handler vollständig mit meiner Anwendung verknüpft ist, würde ich es lieber in meiner Anwendungsversion behalten. Einen Event-Handler für jede Anwendung in meiner Event-Manager-Version zu haben, wird wahrscheinlich schnell unordentlich werden.
Ich weiß nicht viel über 'gen_event', aber der Fehler sieht aus wie' gen_event' versuchte 'zu nennen event_handler_a: init ([])' und entweder das Modul oder Diese Funktion wurde nicht auf diesem Erlang-Knoten definiert/geladen. – Dogbert
@Dogbert Ich habe das vergessen. Wenn der Ereignismanager den init/1-Callback vom Event-Handler aus aufruft, muss er den Knotennamen angeben. Leider zeigt das Dokument 'add_handler (EventMgrRef, Handler, Args) -> Result' mit' Handler = Module | {Module, Id} ' – ITChap
Ich denke, Sie können das als' Args' übergeben, also 'gen_event: add_handler (_, _, node1 @ host1)'. – Dogbert