我有一组有些无状态且执行类似任务的参与者。 这些 worker 中的每一个都不可靠并且可能表现不佳。在我的设计中——我可以很容易地产生更多的 Actor 来代替懒惰的 Actor 。
一个 Actor 的表现,是自己评价的。有没有办法让主管/ Actor 池进行此评估,以帮助确定哪些 worker 速度慢到足以让我更换?还是我当前的策略是“正确的”策略?
最佳答案
我自己是 akka 的新手,所以只是想提供帮助,但我的攻击将遵循以下原则:
按照以下几行编写您自己的路由逻辑 https://github.com/akka/akka/blob/v2.3.5/akka-actor/src/main/scala/akka/routing/SmallestMailbox.scala请记住,每个池都会创建一个新实例,因此每个实例都可以存储有关每个参与者到目前为止处理了多少消息的信息。在这种情况下,一旦您发现某个 actor 表现不佳,就在单独的数据结构中将其标记为“可移除”(一旦它不再处理任何新消息)并停止发送更多消息。
编写您自己的路由器池:覆盖 createRouterActor https://github.com/akka/akka/blob/v2.3.5/akka-actor/src/main/scala/akka/routing/RouterConfig.scala:236提供您自己的 CustomRouterPoolActor
按照以下行编写您的 CustomRouterPoolActor:https://github.com/akka/akka/blob/8485cd2ebb46d2fba851c41c03e34436e498c005/akka-actor/src/main/scala/akka/routing/Resizer.scala (参见 ResizablePoolActor)。该参与者将有权访问您的策略实例。从此策略实例中删除已标记为删除的路由。查看 ResizablePoolCell 以了解如何移除角色。
关于multithreading - 更换池中表现不佳的 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29161763/