tell()有什么问题:来自自定义Akka路由器的其他演员吗?

时间:2013-08-18 12:20:14

标签: routing akka actor

创建自定义Akka路由器(例如http://doc.akka.io/docs/akka/snapshot/scala/routing.html#custom-router-scala)的示例显示路由器返回目标actor / sender对的列表,以便告诉Akka要向其发送消息的基础actor。为什么这个模式只是使用tell()向这些actor发送消息而优先于actor呢?

具体来说,在路由器中使用tell()是否有任何问题,可能是异步的,即稍后从另一个线程调用路由函数的线程?

1 个答案:

答案 0 :(得分:2)

1)为什么这种模式只是使用tell()向这些演员发送消息而优先于演员?

因为路由器具有的功能不仅仅是发送给路由器(例如调整大小)。这是一种很好的逻辑分离,可以将确定路由的逻辑与路由消息所涉及的其余逻辑区分开来。这允许那些不同的部分彼此独立地改变。另外,如果您刚开始在tell内部开始执行额外的createRoute,那么这不是很有用,因为它会产生副作用,您应该尝试避免。

2)具体来说,在路由器中使用tell()是否有任何问题,可能是异步的,即稍后从另一个线程而不是调用路由函数的线程?

虽然这是可能的,但如上所述,这可能不是一个好主意。这种副作用可能非常难以测试,并且它不适合功能范例。如果您确实需要这样的东西,那么可能只需使用Actor而不是路由器作为路由逻辑。路由器旨在为您提供适合执行路由的简单模型。如果您的要求不适合此型号,那么路由器可能不合适。