Routing tell()从自定义Akka路由器调用其他参与者有什么问题吗?

Routing tell()从自定义Akka路由器调用其他参与者有什么问题吗?,routing,akka,actor,Routing,Akka,Actor,创建自定义Akka路由器(例如)的示例显示,路由器返回目标参与者/发送者对的列表,以便告诉Akka要向哪些底层参与者发送消息。为什么这种模式比只使用tell()向参与者发送消息的参与者更受欢迎 具体地说,在路由器中使用tell()会有什么问题吗,可能是异步的,即稍后从调用路由函数的线程以外的另一个线程开始?1)为什么这种模式比简单地使用tell()向这些参与者发送消息更可取 因为路由器的功能不仅仅是发送给被路由者(比如调整大小)。将确定路由对象的逻辑与路由消息所涉及的其他逻辑区分开来是一种很好的

创建自定义Akka路由器(例如)的示例显示,路由器返回目标参与者/发送者对的列表,以便告诉Akka要向哪些底层参与者发送消息。为什么这种模式比只使用tell()向参与者发送消息的参与者更受欢迎

具体地说,在路由器中使用tell()会有什么问题吗,可能是异步的,即稍后从调用路由函数的线程以外的另一个线程开始?

1)为什么这种模式比简单地使用tell()向这些参与者发送消息更可取

因为路由器的功能不仅仅是发送给被路由者(比如调整大小)。将确定路由对象的逻辑与路由消息所涉及的其他逻辑区分开来是一种很好的逻辑分离。这允许这些不同的部分相互独立地改变。另外,如果您刚开始在
createRoute
中执行额外的
tell
s,那么这并不是很有效,因为这是您应该尝试避免的副作用

2) 具体地说,在路由器中使用tell()会有什么问题吗,可能是异步的,即稍后从调用路由函数的线程以外的另一个线程开始

虽然这是可能的,正如我上面提到的,但这可能不是一个好主意。这种副作用可能非常难以测试,而且在功能范式中并不适合。如果你真的需要这样的东西,那么也许只需要使用一个参与者而不是路由器作为你的路由逻辑。路由器是为了给你一个简单的模型,以适合执行路由。如果您的需求不适合此型号,则路由器可能不适合