路由
简介
在某些情况下,将同一类型的消息分发到一组 Actor 上是很有用的,这样消息就可以并行处理,单个 Actor 一次只处理一条消息。
路由()本身就是一种行为,它衍生到一个正在运行的 Actor 身上,然后将发送给它的任何消息转发到路由集之外的最后一个收件人。
Akka 型路由包括两种类型的路由:池路由和组路由。
池路由是用一个路由Behavior
创建的,并产生许多具有该行为的子代,然后将消息转发给这些子代。
组路由
组路由是用ServiceKey
创建的,它使用来发现该键的可用 Actor,并将消息路由到当前已知的已注册 Actor 之一。
由于使用了Receptionist
,这意味着组路由可以随时识别集群,并将接收集群中任何节点上注册的路由,目前没有逻辑来避免路由到不可访问的节点,请参见「#26355」。
这也意味着路由的集合最终是一致的,并且当组路由器启动时,它知道的路由集合立即是空的。当路由器集为空时,发送到路由的消息将被转发到死信。
有两种不同的策略用于选择转发消息的路由,在生成消息之前可以从路由中选择该路由:
这是池路由的默认路由。
Random
通过路由发送消息时随机选择路由。
这是组路由的默认值路由。
路由和性能
注意,如果路由共享一个资源,那么资源将决定增加 Actor 的数量是否会实际提供更高的吞吐量或更快的答案。例如,如果路由是 CPU 绑定的 Actor,那么创建更多的路由的性能不会比执行 Actor 的线程更好。
英文原文链接:.