私は独自の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コールバックを呼び出す場合は、ノード名を指定する必要があります。残念なことに、このドキュメントでは、 'Handler = Module |を使用して ' add_handler(EventMgrRef、Handler、Args) - > Result'を示しています。 {Module、Id} ' – ITChap
あなたは' Args'としてそれを渡すことができると思いますので、 'gen_event:add_handler(_、_、node1 @ host1)'です。 – Dogbert