有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Akka如何在使用TimerBasedThrottler和RoundRobinRouter时进行缩放

我有一个设计,一个主管演员根据Akka TimerBasedThrottler类创建一个演员。该参与者动态创建子参与者,以执行对上游系统的web服务请求。这在小范围内运行良好,但是随着请求数量开始增加,我的Actor邮箱开始增长,响应时间也开始缩短

我需要的是能够创建一个RoundRobinRouter,它将负载平衡请求发送到多个主管实例。但是我需要TimerBasedThrottler是一个单独的实例,由RoundRobinRouter创建的每个参与者实例共享

有人能帮助我如何使用RoundRobinRouter创建新的supervisor-Actor实例,并传入TimerBasedThrottler的单个实例吗


共 (2) 个答案

  1. # 1 楼答案

    你的描述似乎自相矛盾:限制将限制可以处理的请求数量,而在前面添加路由器也不会有帮助,因为限制将强加给整个参与者组

    当您的系统有这样的容量限制时,内置流量控制是至关重要的:您的主管必须监控未完成请求的数量,并对其进行限制,以使响应时间低于所需的限制。如果收到更多请求,你只能拒绝它们(即立即发回否定回复)

  2. # 2 楼答案

    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 .