Vertx Websocket: балансировка нагрузки - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю в системе, где я отправляю сообщения на сервер с помощью веб-сокетов. Для этого я использую клиент веб-сокетов vertx (без Rx) с несколькими вершинами, и сообщения хранятся во внутренней очереди. Я хочу удалить из очереди сообщений и отправить на вертикаль, это имеет наименьшую нагрузку. Для определения вертикали с наименьшей нагрузкой я планирую использовать соотношение количества полученных сообщений и количества отправленных сообщений. Я понимаю, что веб-сокеты vertx носят асинхронный характер. Но есть ли возможность использовать любой из предоставленных обработчиков для анализа ответа, который указывает, что сообщение достигло сервера.


Пожалуйста, обратите внимание: связь является односторонней, то есть только от клиента к серверу, и сервер не находится в vertx, он использует обычную нету Заранее спасибо.

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете использовать комбинацию SharedData и обычных обработчиков:

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

Это будет увеличивать атомный счетчик для конкретной вертикали каждый раз, когда поступает новый запрос WebSocket.

Теперь вы можете получить все идентификаторы развертывания, используя vertx.deploymentIDs()

Осталось перебрать их, собрать счетчики и получить минимальное.

...