У меня есть два веб-приложения Java 8, развернутые в Tomcat 7, которым необходимо взаимодействовать. Приложение A имеет несколько экземпляров (несколько рабочих Tomcat, A1... An), которые сбалансированы по нагрузке, а приложение B имеет один экземпляр. В настоящее время A может инициировать связь с B через веб-службу SOAP, предоставляемую B, через HTTP через локальный хост.
Теперь B должен инициировать связь со всеми экземплярами A. Поскольку A сбалансирован по нагрузке, B не может использовать HTTP, поскольку доступ ко всем A1... An осуществляется через один и тот же URL-адрес, и B не может контролировать, какой экземпляр получит его запрос.
Идеальное решение может быть похоже на соединение через веб-сокет: каждый экземпляр A будет устанавливать постоянное соединение с B, а B будет передавать данные каждому «подписчику».
Учитывая, что
существует ли стратегия, удовлетворяющая этому требованию?
Я знаю, что RMI доступен, но я не знаю, соответствует ли он моим требованиям. В RMI потребуется ли B предварительное знание каждого экземпляра A и способ их уникальной идентификации? Может ли каждый экземпляр A установить дуплексное соединение, чтобы B не требовал каких-либо сведений об A?




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