3

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

此实现运行良好,直到一个帐户断开连接。基本上,当一个帐户断开连接时,参与者返回一个给定对象,上面写着“连接出现问题”,然后我再次向 RR 路由器发送第二个请求,由另一个帐户处理。

我的问题是,不必在 router-routee 组之外有“重试”逻辑,有没有办法在里面做?我在想,例如在路由器级别,定义一个逻辑来处理这些“连接有问题”消息,方法是自动将请求转发到下一个要由它处理的路由,并且只有在所有路由都有后才返回最终响应尝试过但没有奏效?

Akka 是否提供了一种简单的方法来实现这一点,还是我应该继续我的实现?

4

1 回答 1

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

于 2014-11-24T16:06:07.840 回答