Мы разрабатываем приложение, которое будет включать некоторые элементарные функции чата/передачи сообщений. Веб-приложение развернуто на Wildfly 8.x и использует стандартные библиотеки JavaEE 7 (в отличие от дополнительной среды приложений, такой как Spring). Для этого мы используем веб-сокеты, поскольку нам нужна функция push-to-browser. обеспечивает. Однако мы развертываем это веб-приложение в кластерной/HA конфигурации. Если пользователь А подключен к узлу А и передает сообщение, предназначенное для пользователя Б, подключенного к узлу Б, как мы осуществляем транспортировку этого сообщения?
В конфигурации с одним узлом простым ответом будет поддержка статического Map
или List
, в котором есть все веб-сокеты и сеансы, и маршрутизация к соответствующему веб-сокету в зависимости от адресата сообщения. Но с более чем одним узлом это, очевидно, не будет работать, потому что статические Map
/List
относятся к JVM.
Как бы мы подошли к достижению этой цели? Можно ли использовать JMS и заставить каждый Websocket действовать как прослушиватель JMS? Какое влияние это окажет на использование ресурсов или масштабируемость и производительность?
Мы немного не знаем, как решить эту проблему, и будем очень признательны за любой совет, который вы можете дать.