我有一個運行在其自己的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:初始化([])',要麼該模塊或該函數未在該Erlang節點上定義/加載。 – Dogbert
@Dogbert我忘了這件事。如果事件管理器從事件處理程序調用init/1回調,則需要指定節點名稱。不幸的是,doc顯示 'add_handler(EventMgrRef,Handler,Args) - > Result' with'Handler = Module | {Module,Id}' – ITChap
我想你可以通過'Args',所以'gen_event:add_handler(_,_,node1 @ host1)'。 – Dogbert