Связь между приложениями Java в среде с балансировкой нагрузки Tomcat - PullRequest
2 голосов
/ 06 мая 2019

У меня есть два веб-приложения Java 8, развернутые в Tomcat 7, которые должны взаимодействовать.Приложение A имеет несколько экземпляров (несколько рабочих Tomcat, A1... An), которые сбалансированы по нагрузке, а приложение B имеет один экземпляр.В настоящее время A может инициировать связь с B через веб-сервис SOAP, предоставляемый B, через HTTP через localhost.

B теперь нужно инициировать связь со всеми экземплярами A. Поскольку A сбалансирован по нагрузке, B не может использовать HTTP, потому что к A1... An все обращаются через один и тот же URL, и B не может контролировать, какой экземпляр получит его запрос.

Идеальное решение может быть похоже на соединение через веб-сокет - каждый экземпляр A будет устанавливать постоянное соединение с B, а B будет передавать данные каждому «подписчику».

Учитывая, что

  • и A, и B являются приложениями Java 8
  • оба развернуты в одной и той же установке Tomcat, и
  • не требуется для приложений не-Java для связи сB

Есть ли стратегия, которая удовлетворяет этому требованию?

Я знаю, что RMI доступен, но я не знаю, поддерживает ли он мои требования.В RMI потребуется B предварительное знание каждого экземпляра A и способ их уникальной идентификации?Может ли дуплексное соединение быть установлено каждым экземпляром A, чтобы избежать B, требующего каких-либо знаний об A?

1 Ответ

1 голос
/ 17 мая 2019

Ответ - да, RMI может удовлетворить это требование.Каждый экземпляр приложения A может зарегистрировать объект обратного вызова в приложении B. Приложение B может выполнять итерацию по всем зарегистрированным объектам обратного вызова и уведомлять по очереди.

...