我正在尝试生成一个进程,该进程将每五秒发布一个 HTTP 请求,以向服务器报告它的心跳。我的代码是:
defmodule MyModule.Heartbeat do
def start_link do
spawn_link(fn ->
:timer.apply_interval(:timer.seconds(5), __MODULE__, :beat, [])
end)
end
defp beat do
HTTPoison.post "https://myserver/heartbeat
end
end
defmodule MyModule.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok)
end
def init(:ok) do
children = [
worker(MyModule.Heartbeat, [])
]
supervise(children, strategy: :one_for_one)
end
end
但是,当我尝试启动应用程序时,它会退出并出现以下错误:
[info] Application my_module exited: MyModule.start(:normal, []) returned an error: shutdown: failed to start child: MyModule.Heartbeat
** (EXIT) #PID<0.535.0>
我所需要的只是一些进程,它将作为监督树的一部分运行并在指定的时间间隔内发送它的请求。它本身不需要能够接收任何消息,我也不太在意特定的实现。
谁能建议我在这里做错了什么阻止了这个过程的开始,是否有更好的方法来实现这一点?