【问题标题】:WS proxy for firewalled ActiveMQ server防火墙 ActiveMQ 服务器的 WS 代理
【发布时间】:2015-06-27 18:06:17
【问题描述】:

有没有办法让浏览器客户端通过 Tomcat/Jetty 服务器通过 websockets 进行连接,并将 JMS 连接传递给 ActiveMQ 服务器?

我们希望将我们的 JMS 服务器保留在防火墙后面,但允许已经连接到我们的 Tomcat 应用程序服务器的客户端通过 websockets 连接到 ActiveMQ,并认为同一主机。

【问题讨论】:

    标签: tomcat servlets websocket jms activemq


    【解决方案1】:

    JMS 是客户端 API,而不是协议。

    使用 ActiveMQ JMS 客户端,您将使用 OpenWire,它不能通过 websocket 发送(没有主要的编码练习)。您可以做的是代理一种实际上与 websocket 配合良好的传输方式 - MQTT 或 STOMP。

    我建议在您的 Web 应用程序 (tomcat) 和 ActiveMQ 前面使用一些轻量级的反向代理。那可能是 Apache httpd 或 Nginx。即使没有 websockets,用一些久经考验的 web 代理来保护你的 java 服务器也是一个好主意。

    我已经通过 WebSocket 使用 Web 服务器 Nginx 和 MQTT 做了这样的事情,并且效果很好。虽然我猜 Stomp over WebSocket 没有区别。好消息是您还可以轻松地在代理服务器中终止 SSL,这通常比在应用程序服务器中更快/更容易。

    这对于在客户端使用 JMS api 并没有真正的帮助。不确定是否有任何生产准备就绪。不过,跳过 JMS 规范并在 Websocket 客户端上使用 STOMP 应该可以做到。

    示例 Nginx 配置以代理 WebSocket(并在这种情况下终止 SSL/TLS)到 ActiveMQ 服务器。

    upstream websocket {
        server example.com:61623;
    }
    server {
        listen 8883 ssl;
        ssl on;
        ssl_certificate /etc/nginx/ssl/bundle2015.cer;
        ssl_certificate_key /etc/nginx/ssl/server2015.key;
    
        location / {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade websocket;
            proxy_set_header Connection upgrade;
            proxy_read_timeout 120s;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      相关资源
      最近更新 更多