创建自定义Akka路由器(例如http://doc.akka.io/docs/akka/snapshot/scala/routing.html#custom-router-scala)的示例显示路由器返回目标actor / sender对的列表,以便告诉Akka要向其发送消息的基础actor。为什么这个模式只是使用tell()向这些actor发送消息而优先于actor呢?
具体来说,在路由器中使用tell()是否有任何问题,可能是异步的,即稍后从另一个线程调用路由函数的线程?
答案 0 :(得分:2)
1)为什么这种模式只是使用tell()向这些演员发送消息而优先于演员?
因为路由器具有的功能不仅仅是发送给路由器(例如调整大小)。这是一种很好的逻辑分离,可以将确定路由的逻辑与路由消息所涉及的其余逻辑区分开来。这允许那些不同的部分彼此独立地改变。另外,如果您刚开始在tell
内部开始执行额外的createRoute
,那么这不是很有用,因为它会产生副作用,您应该尝试避免。
2)具体来说,在路由器中使用tell()是否有任何问题,可能是异步的,即稍后从另一个线程而不是调用路由函数的线程?
虽然这是可能的,但如上所述,这可能不是一个好主意。这种副作用可能非常难以测试,并且它不适合功能范例。如果您确实需要这样的东西,那么可能只需使用Actor而不是路由器作为路由逻辑。路由器旨在为您提供适合执行路由的简单模型。如果您的要求不适合此型号,那么路由器可能不合适。