Akka-使用TimerBasedThrottler和RoundRobinRouter时如何扩展

时间:2014-05-06 07:29:25

标签: java akka throttling

我有一个设计,Supervisor Actor根据Akka TimerBasedThrottler类创建一个Actor。此Actor动态创建子Actors以执行对上游系统的Web服务请求。这在小规模下运行良好,但随着请求数量开始增加,我的Actor邮箱开始增长,响应时间也在恶化。

我需要的是创建RoundRobinRouter的能力,它会将请求加载到多个Supervisor实例。但是我需要TimerBasedThrottler是由RoundRobinRouter创建的每个Actor实例共享的单个实例。

有人可以帮助我如何使用RoundRobinRouter创建传递TimerBasedThrottler的单个实例的新主管Actor实例吗?

2 个答案:

答案 0 :(得分:0)

您的描述似乎是矛盾的:限制将限制可以处理的请求数量,并且在此之前添加路由器将无济于事,因为限制将强加给整个参与者组。

当您的系统具有这样的容量限制时,建立流量控制至关重要:您的主管必须监控未完成请求的数量并限制该响应时间以使响应时间低于您所需的限制。如果有更多请求进入,除了拒绝它们之外你无能为力(即立即发回否定回复)。

答案 1 :(得分:0)

  1. public class Master extends UntypedActor { ----- ----- public Master() { workerRouter = this.getContext().actorOf(Worker.createWorker().withRouter(new RoundRobinRouter(8)), "workerRouter"); } // This is best Effort code executed in min. time in akka .