7 crash erlang state exit erlang-supervisor
在重新启动崩溃进程时保持状态的好方法是什么?
我在OTP应用程序中有一个主管,它监视几个"子系统"gen_servers.
例如,一个是"天气"子系统,它每15分钟生成一个新的天气状态,并处理当前天气状态的查询.(想想柠檬水摊位游戏)
如果gen_server崩溃,我希望它重新启动,但应该使用最新的天气状态重新启动,而不是使用硬编码的任意状态init().由于碰撞,模拟状态突然从"冰雹风暴"变为"愉快和轻松"是没有意义的.
由于增加了复杂性,我不愿意在每次更新后使用mnesia或ETS存储状态; 有没有更简单的方法?
只要它必须在运行时,就会建议使用 ETS。价值远远大于复杂性。API 很简单,如果您使用命名表,访问也很简单。您只需在主管启动 gen_server 之前创建表。
两个 - 更复杂 - 替代方案: