アーランは初めてで、新しいパラダイムに頭を悩ませるのに少し苦労しています!
OK、それで私はOTPgen_server内にこの内部関数を持っています:
my_func() ->
Result = ibrowse:send_req(?ROOTPAGE,[{"User-Agent",?USERAGENT}],get),
case Result of
{ok, "200", _, Xml} -> %<<do some stuff that won't interest you>>
,ok;
{error,{conn_failed,{error,nxdomain}}} -> <<what the heck do I do here?>>
end.
接続が失敗した場合の処理を省略した場合、終了シグナルがスーパーバイザーに伝播され、サーバーとともにシャットダウンされます。
私がしたいこと(少なくともこれが私がしたいことだと思います)は、接続障害時に一時停止してからsend_reqを10回再試行すると、その時点でスーパーバイザーが失敗する可能性があることです。
私がこのような醜いことをしたら...
{error,{conn_failed,{error,nxdomain}}} -> stop()
サーバープロセスをシャットダウンし、はい、失敗するまで(10秒以内に10回試行)再起動戦略を使用できます。これも望ましい結果ですが、サーバーからスーパーバイザーへの戻り値は「ok」です。本当に{error、error_but_please_dont_fall_over_mr_supervisor}を返したいです。
このシナリオでは、プロセスを停止させてからスーパーバイザーに再起動させて再試行するのではなく、「my_func」内で失敗した接続を再試行するなど、すべてのビジネスを処理することになっていると強く思います。
質問:このシナリオでの「Erlangの方法」とは何ですか?