使用Apache HTTPD负载均衡WebSocket

JBoss EAP 6.3提供了WebSocket的技术预览, WildFly已将其作为Java EE 7合规性的一部分进行了支持。

github.com/javaee-samples/javaee7-samples/tree/master/websocket提供了在WildFly上运行的大量Java EE 7示例。 如果您对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上还有更多示例。

与WebSocket相关的常见问题之一是如何对它们进行负载平衡。 本技术提示将针对WildFly和JBoss EAP 6.3进行解释。

首先,主要成分是什么?

  • 至少需要Apache HTTPD 2.4.5。 现在,HTTPD二进制文件不适用于Mac,幸运的是,编译提示技术提示#45中有明确说明。
  • mod_proxy_wstunnel是一个Apache模块,它提供对Web套接字连接到后端Web套接字服务器(例如WildFly或JBoss EAP)的隧道传输的支持。 它是mod_proxy的支持模块,为许多流行的协议以及几种不同的负载平衡算法提供支持。 该连接自动升级为WebSocket连接。 并且所有模块已经包含在modules目录中。
  • 需要mod_proxy_balancer模块为HTTP和其他协议提供负载平衡。

我们走吧!

  1. 下载并解压缩WildFly 8.1。
  2. 使用./bin/domain.sh在域模式下启动WildFly 8.1。
  3. 下载此聊天示例 ,将文件重命名为“ chat.war”,并以以下方式部署到“ main-server-group”:
    ~/tools/wildfly-8.1.0.Final/bin/jboss-cli.sh -c --command="deploy chat.war --server-groups=main-server-group"

    与原始Java EE 7 WebSocket聊天示例的唯一区别是添加了System.getProperty("jboss.node.name")来显示为应用程序提供服务的WildFly实例的名称。 源代码可在github.com/arun-gupta/wildfly-samples/tree/master/websocket-loadbalance中找到

  4. /usr/local/apache2/conf/httpd.conf取消注释以下行:
    LoadModule 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

    这将启用所有必需的模块。

  5. 在“ httpd.conf”的末尾添加以下代码片段:
    <Proxy balancer://mycluster>
        BalancerMember ws://localhost:8080
        BalancerMember ws://localhost:8230
    </Proxy>
    ProxyPass /chat balancer://mycluster/chat

    代理是代理资源的容器,在这种情况下,将使用balancer指令创建负载平衡组。 BalancerMember将成员添加到此负载平衡组。 ProxyPass是一个标准指令,它将在不同端口上运行的远程服务器映射到本地服务器的空间。 在这种情况下,WildFly在域模式下启动,因此在端口8080和8230上启动了两个实例。这两个实例都映射到localhost:80,这是默认情况下运行Apache HTTPD的位置。

现在可以通过localhost:8080 / chat(托管域中的第一个实例),localhost:8230 / chat(托管域中的第二个WildFly实例)和localhost / chat(通过Apache HTTPD)访问已部署的聊天示例。

现在,即使您杀死了其中一个WildFly实例,另一个实例也将继续为客户端提供服务。 注意,这仅提供应用程序可用性,因为其中没有会话故障转移。

JBoss EAP 6.3上也对此进行了验证,并且有一些区别:

  1. 请使用github.com/arun-gupta/jboss-samples/tree/master/eap63/websocket-chat中的示例。
  2. 生成的档案名称是不同的,因此该命令看起来也将略有不同:
    ~/tools/jboss-eap-6.3/bin/jboss-cli.sh -c --command="deploy websocket-chat-1.0-SNAPSHOT.war --server-groups=main-server-group"
  3. 将“ httpd.conf”配置为:
    <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不同,在这种情况下,客户端与服务器之间存在直接且“永久”的连接。

请享用!

翻译自: https://www.javacodegeeks.com/2014/09/load-balance-websockets-using-apache-httpd.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值