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

У меня есть два веб-приложения 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 будет передавать данные каждому «подписчику».

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

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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме

Похожие вопросы

Java 8 Steam Group By для двух свойств и получить среднее значение третьего свойства
Установка и запуск ZeroMQ в Windows 10
Возврат суммы элементов, скорректированных по формуле, с использованием рекурсии в коде
Частный метод, определенный в `Sub` и `Super`, оба метода могут быть вызваны для объекта Sub , тогда почему частный метод не наследуется?
Все полигоны становятся прозрачными, как исправить?
Элемент не может быть расположен в (x, y): как исправить список веб-элементов, которые нужно щелкнуть один за другим
Разве повышение не приводит к стиранию типа?
Почему я получаю BundleException при запуске моего минимального примера пакета с Apache Felix Gogo?
Если поле подкласса скрывает поле с тем же именем суперкласса, что именно происходит с обоими полями внутри?
Как использовать конструктор для установки других полей, которые не находятся внутри конструктора