跳至主内容
版本:4.2

RabbitMQ Web STOMP 插件

概述

Web STOMP 插件使得可以通过 WebSocket 连接使用 STOMP

此插件的目标是使 Web 应用程序能够进行 STOMP 消息传递。

一个类似的插件,Web MQTT 插件,使得可以通过 WebSocket 使用 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 MesnilJeff 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 作为默认用户登录/密码。请注意,默认情况下,此用户仅 允许从 localhost 连接。我们强烈建议为生产系统创建单独的用户。

要更改监听端口,请编辑您的 高级配置文件,使其包含一个 tcp_config 部分,其中为 rabbitmq_web_stomp 应用程序设置了一个 port 变量。

例如,一个完整的配置文件,将监听端口更改为 12345,将如下所示:

web_stomp.tcp.port = 12345

您可以使用 tcp_config 部分来指定任何您需要的 TCP 选项。有关可接受参数的详细信息,请参阅 RabbitMQ 网络指南Ranch 文档

TLS (WSS)

该插件支持带 TLS (WSS) 连接的 WebSocket。有关 RabbitMQ TLS 支持的更多信息,请参阅 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 TLSTLS 故障排除

基本 HTTP 身份验证

use_http_auth 选项通过允许客户端在 HTTP 授权头(使用 HTTP Basic Auth)中发送登录名和密码来扩展身份验证。如果存在,将使用这些凭据。否则,将使用默认的 STOMP 凭据。CONNECT 帧中的凭据(如果存在)将被忽略。

这是一个高级功能,仅通过 高级配置文件经典配置格式 暴露。

[
{rabbitmq_web_stomp,
[{use_http_auth, true}]}
].

代理协议

Web STOMP 插件支持 proxy protocol。此功能默认处于禁用状态,要为客户端激活它:

web_stomp.proxy_protocol = true

有关代理协议的更多信息,请参阅 网络指南

高级选项

Web STOMP 插件底层使用了 Cowboy HTTP 和 WebSocket 服务器。Cowboy 提供了 一些选项,可用于自定义服务器在 WebSocket 连接处理方面的行为。

一些设置是通用的 HTTP 设置,另一些则是 WebSocket 特有的。

内容编码

默认情况下,Web STOMP 插件会期望处理编码为 UTF-8 的消息。如果需要,可以使用 ws_frame 选项将此插件公开的 WebSocket 端点切换到二进制模式。

web_stomp.ws_frame = binary

HTTP 选项

通用的 HTTP 服务器设置可以使用 web_stomp.cowboy_opts.* 键来指定,例如:

# 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
© . This site is unofficial and not affiliated with VMware.