我有这个连接到远程服务器的Play应用程序,以便使用给定的API。为了将我的请求负载平衡到远程服务器,我将多个帐户连接到同一台服务器。每个帐户都可以查询API给定次数。每个帐户都由Akka演员处理,这些演员都在Akka Round Robin路由器后面。因此,当想要消耗远程API时,我会问" RR路由器用于想要的信息。
此实现运行正常,直到一个帐户断开连接。基本上,当一个帐户断开连接时,actor会返回一个给定的对象,说明连接错误"然后我再次向RR路由器发送第二个请求以由另一个帐户处理。 / p>
我的问题是,而不是必须重做"重试"在router-routee组之外的逻辑,有没有办法在里面做?我在想,例如在路由器级别,定义一个处理这些&#34的逻辑;连接出错了#34;消息通过自动将请求转发给下一个要由它处理的routee,并且只有在尝试所有路由并且没有一个有效时才返回最终响应?
Akka是否提供了实现此目的的简单方法,还是应该继续实施?
答案 0 :(得分:0)
我不确定我是否完全理解您的设计,但我认为您应该尝试使用 ScatterGatherFirstCompleted 路由逻辑支持的第一个完整模型。
router.type-mapping {
...
scatter-gather-pool = "akka.routing.ScatterGatherFirstCompletedPool"
scatter-gather-group = "akka.routing.ScatterGatherFirstCompletedGroup"
..
}
以简单的形式
---> Route
--> SGFC-1
RR ->
或可能与循环路由器结合使用。
---> Route
--> SGFC-1
RR ->
--> SGFC-2
---> Route
与提案中的连接相同,路由表示连接。 SGFC-1和SGFC-2应该可以访问相同的路由池(连接点)或池的一部分。