RabbitMQ3.7.8およびErlange21.1(centOS 6サーバー)への更新後、netstatは、beam.smpがすべてのインターフェイスのランダムUDPポートでリッスンしていることを示しています。
〜$ Sudo netstat -pnul | grepbeam udp 0 0 0.0.0.0:45224 0.0.0.0:* 7320 /beam.smp
そのポートは再起動するたびに変化し、アプリを停止すると閉じられませんが、アプリを再開すると変化します。
〜$ Sudorabbitmqctlstop_app ノードrabbit @ Hostでのrabbitアプリケーションの停止... 〜$ Sudo netstat -pnul | grepbeam udp 0 0 0.0.0.0:45224 0.0.0.0:* 7320 /beam.smp ~$ Sudorabbitmqctlstart_app 開始ノードrabbit @ Host ... 7つのプラグインで完了。 〜$ Sudo netstat -pnul | grepbeam udp 0 0 0.0.0.0:51001 0.0.0.0:* 7320 /beam.smp
主な質問は、このポートが何に使用されるかです。当然の結果として、これを構成することは可能ですか?
私には、これはsyslog_loggerモジュールによってバインドされたポートであり、このRabbitMQ依存関係に由来しているようです。
https://github.com/schlagert/syslog
デフォルトではRabbitMQノードで開始され、起動するとランダムなポートにバインドされるようです。
ポートが開かれている行: https://github.com/schlagert/syslog/blob/ac8b9eecd593b8cc5a8b1de332d5d7d874e25aa9/src/syslog_logger.erl#L323-L32
ドキュメントによると、この機能はデフォルトで無効になっていますが、Erlangアプリケーションは起動しています。無効になっているときにアプリケーションを起動しない方がいいと思います。
自分で確認したい場合は、次のようにします。
Rabbit ErlangVMへのリモートシェルを起動します。
% Start remote console
erl -sname test -remsh rabbit@$HOSTNAME
% Get all the port infos from the Erlang VM
PortInfos = lists:map(fun erlang:port_info/1, erlang:ports()).
% print the result
rp(PortInfos).
% Investigate the list for one which has the {name, udp_inet} line
% something like this:
[{name,"udp_inet"},
{links,[<0.77.0>]},
{id,9568},
{connected,<0.77.0>},
{input,0},
{output,0},
{os_pid,undefined}]
% And from this you can get the linked process, and see that it is a syslog_logger process
rp(erlang:process_info(erlang:list_to_pid("<0.77.0>"))).
% The result will be something like this
[{registered_name,syslog_logger},
{current_function,{gen_server,loop,7}},
{initial_call,{proc_lib,init_p,5}},
{status,waiting},
{message_queue_len,0},
{messages,[]},
{links,[#Port<0.1196>,<0.76.0>]},
{dictionary,[{'$initial_call',{syslog_logger,init,1}},
{'$ancestors',[<0.76.0>,<0.75.0>]}]},
{trap_exit,false},
......]
$initial_call
の部分が表示され、どのモジュールであるかがわかります。
現在、この動作を制御できるようには見えません。コードは送信のみを行い、私が見ることができるようにモジュールには受信は実装されていません。