RabbitMQ Web STOMP 插件
概述
Web STOMP 插件使通过 WebSocket 连接使用 STOMP 成为可能。
该插件的目标是在 Web 应用程序中启用 STOMP 消息传递。
一个类似的插件,Web MQTT 插件,使通过 WebSockets 使用 MQTT 成为可能。
工作原理
RabbitMQ Web STOMP 插件是 RabbitMQ STOMP 插件 提供的 STOMP 协议实现与 WebSocket 客户端之间的最小化“桥梁”。
RabbitMQ Web STOMP 与 RabbitMQ STOMP 插件完全兼容。
启用插件
rabbitmq_web_stomp
插件随 RabbitMQ 一起提供。
要启用插件,请运行 rabbitmq-plugins
rabbitmq-plugins enable rabbitmq_web_stomp
用法
为了在 Web 浏览器环境中使用 STOMP,需要一个 JavaScript STOMP 库。我们测试了由 Jeff Mesnil 和 Jeff Lindsay 编写的 stomp-websocket 库。此库 作为 RabbitMQ Web STOMP 示例 的一部分包含在内。
WebSocket 端点在 /ws
路径上可用
ws://127.0.0.1:15674/ws
此端点仅适用于支持 Websocket 的客户端。请注意,为了接受二进制消息,需要进行一些配置。
为了使用 WebSocket 从浏览器建立连接,您可以使用以下代码
<!-- include the client library -->
<script src="stomp.js"></script>
<script>
var ws = new WebSocket('ws://127.0.0.1:15674/ws');
var client = Stomp.over(ws);
// ...
获得 client
对象后,您可以按照 stomp.js 库公开的 API 进行操作。下一步通常是与代理建立 STOMP 连接
// ...
var on_connect = function() {
console.log('connected');
};
var on_error = function() {
console.log('error');
};
client.connect('guest', 'guest', on_connect, on_error, '/');
// ...
Web STOMP 示例
作为 RabbitMQ Web STOMP 示例 插件,提供了一些简单的 Web STOMP 示例。要运行它,请按照该插件的安装说明进行操作并启用插件
rabbitmq-plugins enable rabbitmq_web_stomp_examples
示例将在 http://127.0.0.1:15670/ URL 下提供。您将看到两个示例
- "echo" - 展示如何使用 STOMP 进行简单的消息广播
- "bunny" - 简单的协作画布绘画应用程序示例
我们鼓励您查看 源代码。
配置
当没有指定配置时,Web STOMP 插件将在端口 15674 上的所有接口上监听,并且默认的用户登录名/密码为 guest
/guest
。请注意,默认情况下,此用户只能 从本地主机连接。我们强烈建议为生产系统创建单独的用户。
要更改监听器端口,请编辑您的 高级配置文件,使其包含一个带有 rabbitmq_web_stomp
应用程序的 port
变量的 tcp_config
部分。
例如,一个将监听器端口更改为 12345 的完整配置文件如下所示
web_stomp.tcp.port = 12345
您可以使用 tcp_config
部分来指定您需要的任何 TCP 选项。有关接受的参数的详细信息,请参阅 RabbitMQ 网络指南 和 Ranch 文档。
TLS (WSS)
该插件支持使用 TLS (WSS) 连接的 WebSockets。请参阅 TLS 指南,详细了解 RabbitMQ 中的 TLS 支持。
TLS 配置参数在 web_stomp.ssl
部分提供
web_stomp.ssl.port = 15673
web_stomp.ssl.backlog = 1024
web_stomp.ssl.cacertfile = /path/to/ca_certificate.pem
web_stomp.ssl.certfile = /path/to/server_certificate.pem
web_stomp.ssl.keyfile = /path/to/server_key.pem
web_stomp.ssl.password = changeme
TLS 监听器端口、服务器证书文件、私钥和 CA 证书捆绑包是必填选项。如果私钥使用密码,则密码也是必需的。扩展的 TLS 设置列表与 核心服务器 的设置基本相同。在 Ranch 文档 中可以找到此插件接受的所有选项的完整列表。
启用的 TLS 版本和密码套件
可以配置 RabbitMQ 将使用哪些 TLS 版本和密码套件。请注意,并非所有套件都可以在所有系统上使用。
RabbitMQ TLS 指南有一个 关于 TLS 版本的部分,还有一个 关于密码套件的部分。下面是 高级配置格式 中的示例,它配置了密码套件和插件的许多其他 TLS 选项
web_stomp.ssl.port = 15673
web_stomp.ssl.backlog = 1024
web_stomp.ssl.certfile = /path/to/server_certificate.pem
web_stomp.ssl.keyfile = /path/to/server_key.pem
web_stomp.ssl.cacertfile = /path/to/ca_certificate_bundle.pem
web_stomp.ssl.password = changeme
web_stomp.ssl.honor_cipher_order = true
web_stomp.ssl.honor_ecc_order = true
web_stomp.ssl.client_renegotiation = false
web_stomp.ssl.secure_renegotiate = true
web_stomp.ssl.versions.1 = tlsv1.2
web_stomp.ssl.versions.2 = tlsv1.1
web_stomp.ssl.ciphers.1 = ECDHE-ECDSA-AES256-GCM-SHA384
web_stomp.ssl.ciphers.2 = ECDHE-RSA-AES256-GCM-SHA384
web_stomp.ssl.ciphers.3 = ECDHE-ECDSA-AES256-SHA384
web_stomp.ssl.ciphers.4 = ECDHE-RSA-AES256-SHA384
web_stomp.ssl.ciphers.5 = ECDH-ECDSA-AES256-GCM-SHA384
web_stomp.ssl.ciphers.6 = ECDH-RSA-AES256-GCM-SHA384
web_stomp.ssl.ciphers.7 = ECDH-ECDSA-AES256-SHA384
web_stomp.ssl.ciphers.8 = ECDH-RSA-AES256-SHA384
web_stomp.ssl.ciphers.9 = DHE-RSA-AES256-GCM-SHA384
TLS (WSS) 故障排除
有关更多信息,请参阅 RabbitMQ TLS 和 TLS 故障排除。
基本 HTTP 身份验证
use_http_auth
选项通过允许客户端在 HTTP 授权标头中发送登录名和密码(使用 HTTP 基本身份验证)来扩展身份验证。如果存在,将使用这些凭据。否则,将使用默认的 STOMP 凭据。CONNECT 帧中找到的凭据(如果有)将被忽略。
这是一项高级功能,仅通过 高级配置文件 或 经典配置格式 公开。
[
{rabbitmq_web_stomp,
[{use_http_auth, true}]}
].
代理协议
Web STOMP 插件支持 代理协议。此功能默认情况下处于禁用状态,要为客户端激活它,请执行以下操作
web_stomp.proxy_protocol = true
有关代理协议的更多信息,请参阅 网络指南。
高级选项
Web STOMP 插件在后台使用 Cowboy HTTP 和 WebSocket 服务器。Cowboy 提供了 许多选项,可用于自定义服务器的行为,以处理 WebSocket 连接。
一些设置是通用的 HTTP 设置,另一些设置是特定于 WebSockets 的。
内容编码
默认情况下,Web STOMP 插件将期望处理编码为 UTF-8 的消息。如果需要,可以使用 ws_frame
选项将此插件公开的 WebSocket 端点切换到二进制模式
web_stomp.ws_frame = binary
HTTP 选项
可以使用 web_stomp.cowboy_opts.*
键指定通用的 HTTP 服务器设置,例如
# connection inactivity timeout
web_stomp.cowboy_opts.idle_timeout = 60000
# max number of pending requests allowed on a connection
web_stomp.cowboy_opts.max_keepalive = 200
# max number of headers in a request
web_stomp.cowboy_opts.max_headers = 100
# max number of empty lines before request body
web_stomp.cowboy_opts.max_empty_lines = 5
# max request line length allowed in requests
web_stomp.cowboy_opts.max_request_line_length
WebSocket 选项
# WebSocket traffic compression is enabled by default
web_stomp.ws_opts.compress = true
# WebSocket connection inactivity timeout
web_stomp.ws_opts.idle_timeout = 60000
web_stomp.ws_opts.max_frame_size = 50000