Skip to main content

Introducing RabbitMQ-Web-Stomp

·4 分钟阅读
Marek Majkowski

在 RabbitMQ 总部,我们长期以来一直在努力寻找一种在 Web 浏览器中公开消息传递的好方法。过去,我们尝试过很多方法,从旧且著名的 JsonRPC 插件(基本上通过 AJAX 公开 AMQP),到 Rabbit-Socks(尝试创建通用协议中心),再到管理插件(可用于基本操作,例如从浏览器发送和接收消息)。

随着时间的推移,我们了解到 Web 上的消息传递与我们习惯的消息传递非常不同。我们的尝试都没有真正解决这个问题,而且 Web 上的消息传递在一段时间内可能仍然是一个未完全解决的问题。

话虽如此,RabbitMQ 用户一直在询问一个简单的事情,虽然不完美,但远非在浏览器中进行消息传递的最糟糕方式:通过 Websocket 公开 STOMP。

STOMP + Websockets

我们很高兴为 RabbitMQ 推出一个新的插件

它基本上是 RabbitMQ-STOMP 插件和 Websockets 服务器 (SockJS) 之间的桥梁。 希望这对一系列 rabbit-on-the-web 用例来说是一个不错的解决方案。

它实际上做了什么

在 RabbitMQ 内部

RabbitMQ-Web-Stomp 是一个简单的工具。它采用 RabbitMQ-STOMP 插件提供的 STOMP 协议,并使用 SockJS 服务器公开它。

线路协议

可以使用可靠的 SockJS 协议从任何浏览器连接到 SockJS 端点。 即使在不支持原生 websocket 的浏览器中,或者在阻止非 http 传输的损坏代理后面的环境中,这也有效。

或者,对于不需要这种复杂程度的用户,SockJS 公开了一个原始的 websockets url,可以直接从最新的、支持 websocket 的浏览器访问。

在浏览器中

在浏览器中,与 SockJS 端点的连接基本上是原始的 STOMP 连接。 您可以发送和接收正常的 STOMP 帧。

任何体面的 javascript STOMP 库都应该能够处理这个问题。 在我们的示例中,我们使用的是 stomp-websocket 库,作者是 Jeff MesnilJeff Lindsay

我们在示例中使用了这段代码

<script src="http://cdn.sockjs.org/sockjs-0.3.min.js"></script>
<script src="stomp.js"></script>
<script>
WebSocketStompMock = SockJS;

var client = Stomp.client('http://127.0.0.1:55674/stomp');
[...]

安装

Rabbitmq-Web-Stomp 是一个实验性插件。 它未与 vanilla RabbitMQ 版本一起分发; 您需要手动安装它。

  1. 您至少需要 Erlang R14 (更多信息)。
  2. 您需要安装 Rabbitmq-server 2.8.2
  3. 获取所需的 erlang 插件 .ez 文件
wget \
https://rabbitmq.org.cn/releases/plugins/v2.8.2-web-stomp-preview/cowboy-0.5.0-rmq2.8.2-git4b93c2d.ez \
https://rabbitmq.org.cn/releases/plugins/v2.8.2-web-stomp-preview/sockjs-0.2.1-rmq2.8.2-gitfa1db96.ez \
https://rabbitmq.org.cn/releases/plugins/v2.8.2-web-stomp-preview/rabbitmq_web_stomp-2.8.2.ez \
https://rabbitmq.org.cn/releases/plugins/v2.8.2-web-stomp-preview/rabbitmq_web_stomp_examples-2.8.2.ez
  1. 接下来,将它们复制到 插件目录。 例如,在我的 Ubuntu 机器上,这将是
sudo cp *.ez /usr/lib/rabbitmq/lib/rabbitmq_server-2.8.2/plugins
  1. 现在,您可以使用 rabbitmq-plugins 启用它们
sudo rabbitmq-plugins enable rabbitmq_web_stomp
sudo rabbitmq-plugins enable rabbitmq_web_stomp_examples
  1. 重启 rabbitmq 服务器。 在 ubuntu 上
sudo /etc/init.d/rabbitmq-server restart

您可能已经注意到,我们启用了两个插件

请记住,RabbitMQ-web-stomp 依赖于 RabbitMQ-STOMP,后者默认绑定到端口 61613。

用法

如果您启用了 RabbitMQ-web-stomp-examples 插件,您应该能够立即运行我们准备的两个示例。 只需在 Web 浏览器中打开 http://127.0.0.1:55670/

总结

RabbitMQ-web-stomp 是一个非常简单的插件,但它开启了广泛的可能性,将 STOMP 协议公开给浏览器。

与往常一样,欢迎反馈。 我们也在寻找更多示例的灵感!

© . All rights reserved.