将消息转发到下一个Round Robin路由器

时间:2014-06-22 19:09:31

标签: scala routing akka round-robin

我有这个连接到远程服务器的Play应用程序,以便使用给定的API。为了将我的请求负载平衡到远程服务器,我将多个帐户连接到同一台服务器。每个帐户都可以查询API给定次数。每个帐户都由Akka演员处理,这些演员都在Akka Round Robin路由器后面。因此,当想要消耗远程API时,我会问" RR路由器用于想要的信息。

此实现运行正常,直到一个帐户断开连接。基本上,当一个帐户断开连接时,actor会返回一个给定的对象,说明连接错误"然后我再次向RR路由器发送第二个请求以由另一个帐户处理。 / p>

我的问题是,而不是必须重做"重试"在router-routee组之外的逻辑,有没有办法在里面做?我在想,例如在路由器级别,定义一个处理这些&#34的逻辑;连接出错了#34;消息通过自动将请求转发给下一个要由它处理的routee,并且只有在尝试所有路由并且没有一个有效时才返回最终响应?

Akka是否提供了实现此目的的简单方法,还是应该继续实施?

1 个答案:

答案 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应该可以访问相同的路由池(连接点)或池的一部分。