目前我們使用的 Supervisor 開啟時,需指定固定的 children
如果需要動態的增加減少監督的 process ,則需要使用 DynamicSupervisor
因為目前要開啟多個 Bank,要將 Bank 模組 start_link 函式裡的名字拿掉
def start_link(init_balance) do
IO.puts("啟動中")
GenServer.start_link(__MODULE__, init_balance)
end
使用普通 Supervisor 啟動一個 DynamicSupervisor ,需指定名字
children = [
{DynamicSupervisor, name: DynamicBanker, strategy: :one_for_one}
]
Supervisor.start_link(children, strategy: :one_for_one)
替 DynamicBanker 增加 child
{:ok, bank1} = DynamicSupervisor.start_child(DynamicBanker, {NiceBank.Bank, 100})
{:ok, bank2} = DynamicSupervisor.start_child(DynamicBanker, {NiceBank.Bank, 200})
也可以查看 DynamicBanker
iex(6)> DynamicSupervisor.count_children(DynamicBanker)
%{active: 2, workers: 2, supervisors: 0, specs: 2}