【发布时间】:2012-01-23 18:03:29
【问题描述】:
我目前正在开发一个应用程序,我需要在其中管理多个服务的状态,并根据一些事件停止/启动它们。问题是,正如文档中所述,Guava 的服务是单向的,这意味着一旦停止,就无法再次启动。
由于我需要以某种方式规避这个问题,我面临着几个替代方案,我想提出来考虑(特别是因为每个方案都可能存在我现在不知道的缺点)。
这个问题的第一个明显解决方案是在我需要“重新启动”它时实例化一个新服务。这可行,但在我当前的架构中,它会使事情变得有点复杂:目前我正在启动所有服务,并基于来自 EventBus 的事件,如果需要,启动或停止它们。调用 start 和 stop 方法的类只保存对服务 Map 的引用,并根据收到的事件在这些实例上调用正确的方法。如果我需要实例化一个新对象来响应事件,我将不得不放弃我目前拥有的一些解耦(可能通过保留每种服务类型的类并使用反射调用构造函数)。
另一种可能性是将 Service 接口实现为 RestartableThreadedService(或类似的东西)。如果我采用这条路线,我的 start() 方法可以像第一次一样创建另一个线程,并重置状态。
第二种方法有什么明显的缺点吗?我担心我可能会在这里遗漏一些明显的缺点(除了必须编写一些更复杂的代码之外),尤其是在线程管理方面。
【问题讨论】: