如何在 Elixir 运行时关闭百老汇?

How to shutdown Broadway during runtime in Elixir?

我正在使用 Broadway with BroadwayKafka 作为制作人,鉴于我的用例,我必须在运行时启动和停止 Broadway。

在运行时启动 Broadway 已经没有问题了。然而,我很难找到一种优雅地关闭百老汇流程的方法。 Broadway 模块本身不提供停止进程的功能(据我所知),因此,我目前通过 Process.exit(broadway_pid, :kill) 手动终止进程。这当然有效,但可能不是关闭百老汇的预期方式。

什么是关闭百老汇最干净的方式,而不是残忍地杀死百老汇进程?

Broadway delegates to Broadway.Topology which is apparently an old good GenServer, so you might GenServer.stop/3 等于

GenServer.stop(Broadway.Topology, :normal)

这将完成所有 OTP 正常关闭程序(回调等)