我知道 Akka 演员不应该为了保持对消息的反应而阻塞,但是我如何构建我的服务来监控一个无限期运行的进程?
例如,我们正在使用 Amazon Kinesis 连接器库。您创建一个具有给定配置的连接器,该配置继承自 Runnable,然后调用 Run() 方法。连接器只是无限期地运行,从 Kinesis 中提取数据,并将其写入 Amazon S3。事实上,如果runnable返回,那就是一个错误,需要重新启动。
方法 (1) 将简单地为每个运行的 Kinesis 连接器创建一个子 Actor,如果 Run() 方法返回,则抛出异常,监督 Actor 会注意到异常并重新启动子 Actor。每个线程每个子actor一个连接器。
方法 (2) 是让子 Actor 将 Kinesis 连接器包装在 Future 中,如果未来返回,则 Actor 将在另一个 Future 中重新启动连接器。可以想象一个参与者可以管理多个连接器,但这是否意味着每个 Future 都在单独的线程中执行?
哪种方法最符合 Akka 的哲学,或者还有其他人推荐的方法吗?一般来说,我想发现任何连接器的任何问题,然后重新启动它。总共不会有超过六个连接器并行运行。