Vertx Websocket:负载均衡

Vertx Websocket: Load Balancing

我正在开发一个使用网络套接字向服务器发送消息的系统。为此,我使用带有多个 Verticle 的 vertx(无 Rx)网络套接字客户端,消息存储在内部队列中。我希望从消息队列中出列并提交给负载最小的 Verticle。为了识别负载最小的 Verticle,我计划使用收到的确认消息数与发送的消息数的比率。我知道 vertx 网络套接字本质上是异步的。但是是否有规定使用任何提供的处理程序来解析指示消息已到达服务器的响应。


请注意:通信是一种方式,即仅从客户端到服务器,而服务器不在 vertx 上,它使用普通的 netty 提前致谢。

您可以结合使用 SharedData 和常规处理程序:

this.vertx.createHttpServer().websocketHandler(ws -> {
  ws.handler(data -> {
    this.vertx.sharedData().getCounter(this.deploymentID(), (c) -> {
      c.result().incrementAndGet((dummy) -> {});
    });
  });
});

每次收到新的 WebSocket 请求时,这都会增加特定 Verticle 的原子计数器。

现在您可以使用 vertx.deploymentIDs()

获取所有部署 ID

剩下的就是迭代那些,收集计数器,然后得到最小的。