簡體   English   中英

Erlang OTP主管

[英]Erlang OTP supervisor

我正在研究《 Erlang編程》一書中的練習12-2。 我有一個模塊db_server_otp ,它實現了OTP gen_server行為。 作為獨立模塊,我已經對其進行了測試,並且可以按預期工作。 我現在必須為此添加一名主管。 基於本章中的示例,我創建了一個模塊db_server_sup ,如下所示:

-module(db_server_sup).
-export([start/0,init/1]).
-behavior(supervisor).

start() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init(_Arguments) ->
    DbServerOtp = {db_server_otp,                %% Id
                   {db_server_otp, start, []},   %% child process
                   permanent,                    %% restart 
                   30000,                        %% shutdown (ms)
                   worker,                       %% type
                   {db_server_otp}},             %% required modules
    {ok, 
     {{one_for_all,           %% terminate all children and restart
       5,                     %% max of n restarts in MaxSeconds
       3600},                 %% MaxSeconds (s)
      [DbServerOtp]}}.        %% child process list

這兩個模塊都位於同一目錄中,並且我用.beam文件編譯的兩個模塊都在啟動erlang shell的相同工作目錄中。 但是,使用erlang shell,我無法啟動主管。

Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:8:2] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.4  (abort with ^G)
1> c(db_server_otp).
./db_server_otp.erl:5: Warning: undefined callback function code_change/3 (behaviour 'gen_server')
./db_server_otp.erl:5: Warning: undefined callback function handle_info/2 (behaviour 'gen_server')
{ok,db_server_otp}
2> c(db_server_sup).
{ok,db_server_sup}
3> db_server_sup:start().
** exception exit: {start_spec,{invalid_modules,{db_server_otp}}}

我是否必須導入db_server_otp模塊? 如果是這樣,我必須導入什么功能? 我正在db_server_otp中導出所有OTP方法:

-module(db_server_otp).
-export([start/0,stop/0]).
-export([write/2,read/1,delete/1,match/1]).
-export([init/1,terminate/2,handle_cast/2,handle_call/3]).
-behavior(gen_server).

“必需的模塊”應該是列表,而不是元組。

嘗試使用:

DbServerOtp = {db_server_otp,                %% Id
               {db_server_otp, start, []},   %% child process
               permanent,                    %% restart 
               30000,                        %% shutdown (ms)
               worker,                       %% type
               [db_server_otp]},             %% required modules

風格上的約定:看到db_server_supdb_server_otp的啟動函數都創建了鏈接,您應該將它們稱為start_link 這是一個常見的約定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM