JBoss EAP 6.3 предоставляет технологию предварительного просмотра WebSocket, и WildFly поддерживает их как часть соответствия Java EE 7.
github.com/javaee-samples/javaee7-samples/tree/master/websocket предоставляют тонны примеров Java EE 7, которые работают на WildFly. Если вас интересует аналогичная функциональность в JBoss EAP 6.3, тогда краткий старт — github.com/jboss-developer/jboss-eap-quickstarts/tree/6.4.x-develop/websocket-hello . Кроме того, есть еще несколько примеров на github.com/arun-gupta/jboss-samples/tree/master/eap63 .
Один из распространенных вопросов, связанных с WebSockets, — как их сбалансировать. Этот технический совет объяснит это для WildFly и JBoss EAP 6.3.
Во-первых, каковы основные компоненты?
- Требуется как минимум Apache HTTPD 2.4.5. Теперь двоичные файлы HTTPD недоступны для Mac, но, к счастью, инструкции по компиляции четко объяснены в Tech Tip # 45 .
- mod_proxy_wstunnel — это модуль Apache, который обеспечивает туннелирование соединений Web Socket с внутренним сервером Web Sockets, таким как WildFly или JBoss EAP. Это модуль поддержки для mod_proxy, который обеспечивает поддержку ряда популярных протоколов, а также нескольких различных алгоритмов балансировки нагрузки. Соединение автоматически обновляется до соединения WebSocket. И все модули уже включены в каталог
modules
. - Требуется модуль mod_proxy_balancer, который обеспечивает балансировку нагрузки для HTTP и других протоколов.
Поехали!
- Скачайте и распакуйте WildFly 8.1.
- Запустите WildFly 8.1 в доменном режиме, используя ./bin/domain.sh.
- Загрузите этот пример чата , переименуйте файл в «chat.war» и разверните в «main-server-group» следующим образом:
1
~/tools/wildfly-
8.1
.
0
.Final/bin/jboss-cli.sh -c --command=
"deploy chat.war --server-groups=main-server-group"
Единственным отличием от исходного примера Java EE 7 WebSocket Chat является добавление
System.getProperty("jboss.node.name")
для отображения имени экземпляра WildFly, обслуживающего приложение. Исходный код доступен по адресу github.com/arun-gupta/wildfly-samples/tree/master/websocket-loadbalance . - Раскомментируйте следующие строки в
/usr/local/apache2/conf/httpd.conf
:1234LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
Это включит все необходимые модули.
- Добавьте следующий фрагмент кода в конце «httpd.conf»:
12345
<
Proxy
balancer://mycluster>
BalancerMember ws://localhost:8080
BalancerMember ws://localhost:8230
</
Proxy
>
ProxyPass /chat balancer://mycluster/chat
Прокси является контейнером для прокси-ресурсов и в этом случае создает группу балансировки нагрузки с использованием директивы балансировщика. BalancerMember добавляет участника в эту группу балансировки нагрузки. ProxyPass — это стандартная директива, которая отображает удаленные серверы, работающие на разных портах, в пространство локального сервера. В этом случае WildFly запускается в режиме домена и запускает два экземпляра на портах 8080 и 8230. Оба этих экземпляра сопоставляются с localhost: 80, где по умолчанию работает HTTPD Apache.
Развернутый пример чата теперь доступен по адресу localhost: 8080 / chat (первый экземпляр в управляемом домене), localhost: 8230 / chat (второй экземпляр WildFly в управляемом домене) и localhost / chat (через Apache HTTPD).
Теперь, даже если вы убьете один из экземпляров WildFly, другой будет продолжать обслуживать клиента. Обратите внимание, что это дает только доступность приложения, так как в этом случае нет сбоя сеанса.
Это также было проверено на JBoss EAP 6.3, и есть несколько отличий:
- Вместо этого используйте образец из github.com/arun-gupta/jboss-samples/tree/master/eap63/websocket-chat .
- Имя сгенерированного архива отличается, поэтому команда будет выглядеть немного иначе:
1
~/tools/jboss-eap-
6.3
/bin/jboss-cli.sh -c --command=
"deploy websocket-chat-1.0-SNAPSHOT.war --server-groups=main-server-group"
- Настройте «httpd.conf» следующим образом:
12345
<
Proxy
balancer://mycluster>
BalancerMember ws://localhost:8080
BalancerMember ws://localhost:8230
</
Proxy
>
ProxyPass /websocket-chat-1.0-SNAPSHOT balancer://mycluster/websocket-chat-1.0-SNAPSHOT
Вот и все!
Смотрите это в прямом эфире в действии:
Важно понимать, что в WebSocket отсутствует понятие «липких сессий», поскольку, в отличие от HTTP, в этом случае существует прямое и «постоянное» соединение между клиентом и сервером.
Наслаждайтесь!
Ссылка: | Балансировка нагрузки WebSockets с использованием Apache HTTPD от нашего партнера по JCG Аруна Гупта из блога Miles to go 2.0… . |