文档章节

elixir官方教程Mix与OTP(四) 主管与应用

ljzn
 ljzn
发布于 2016/08/10 15:14
字数 4797
阅读 59
收藏 0

#主管与应用

  1. 我们的第一个主管
  2. 理解应用
  3. 开启应用
  4. 应用回调
  5. 项目还是应用?
  6. 简单的一对一主管
  7. 监督树
  8. 观察者
  9. 测试中的共用状态

现在,我们的应用有个一个能监控几十个桶,不是几百个,的注册表.尽管我们认为目前的实现很不错,但任何软件都会有bug,失败也肯定会发生.

当时事件失败时,你的第一反应可能是:"让我们来挽救这些错误吧".但在Elixir中我们要避免这种在其它语言中常见的抢救异常的防御式编程习惯.相反,我们说:"让它崩溃".如果有一个bug导致我们的注册表崩溃,我们没有什么好担心的,因为我们要设置一个主管,它会开启一个新的注册表副本.

本章,我们将学习主管和应用.我们要创造的不是一个,而是两个主管,并用它们来监督我们的进程.

#我们的第一个主管

创建一个主管与创建一个GenServer差不多.我们将在lib/kv/supervisor.ex文件中定义一个名为KV.Supervisor的模块,它将行使主管的行为:

defmodule KV.Supervisor do
  use Supervisor

  def start_link do
    Supervisor.start_link(__MODULE__, :ok)
  end

  def init(:ok) do
    children = [
      worker(KV.Registry, [KV.Registry])
    ]

    supervise(children, strategy: :one_for_one)
  end
end

现在我们的主管有一个单独的孩子:注册表.一个工人的格式:

worker(KV.Registry, [KV.Registry])

将使用以下调用来开始一个进程:

KV.Registry.start_link(KV.Registry)

我们传送给start_link的参数是进程的名字.为被监督的进程命名是很常见的,这样其它进程就可用