RabbitMQ-Web-Stomp 简介
在 RabbitMQ 总部,我们有一段时间一直在努力寻找一种好的方法来在 Web 浏览器中公开消息传递。过去我们尝试过很多方法,从久负盛名的 JsonRPC 插件(基本上是通过 AJAX 公开 AMQP),到 Rabbit-Socks(尝试创建一个通用协议中心),再到管理插件(可用于发送和接收来自浏览器的基本消息)。
随着时间的推移,我们了解到 Web 上的消息传递与我们习惯的非常不同。我们之前尝试的任何方法都没有真正解决这个问题,并且 Web 上的消息传递可能在一段时间内都不会成为一个完全解决的问题。
也就是说,RabbitMQ 用户不断询问的一件简单的事情是,尽管不完美,但它远非在浏览器中进行消息传递的最糟糕方法:通过 Websockets 公开 STOMP。
STOMP + Websockets
我们很高兴推出 RabbitMQ 的一个新插件
它基本上是 RabbitMQ-STOMP 插件和 Websockets 服务器(SockJS)之间的桥梁。希望它能为一组 rabbit-on-the-web 使用案例提供一个不错的解决方案。
它的实际作用
在 RabbitMQ 中
RabbitMQ-Web-Stomp 非常简单。它采用 RabbitMQ-STOMP 插件提供的 STOMP 协议,并使用 SockJS 服务器公开它。
线协议
可以使用可靠的 SockJS 协议从任何浏览器连接到 SockJS 端点。即使在不支持原生 websockets 的浏览器或代理服务器损坏导致阻止非 http 传输的环境中,这也能正常工作。
或者,对于不需要这种复杂程度的用户,SockJS 会公开一个原始的 websockets url,可以直接从最新的、支持 websocket 的浏览器访问。
在浏览器中
在浏览器中,到 SockJS 端点的连接基本上是一个原始的 STOMP 连接。您可以发送和接收正常的 STOMP 帧。
任何像样的 javascript STOMP 库都应该能够处理它。在我们的示例中,我们使用的是 stomp-websocket 库,该库由 Jeff Mesnil 和 Jeff Lindsay 开发。
我们在示例中使用此代码
<script src="https://cdn.sockjs.org/sockjs-0.3.min.js"></script>
<script src="stomp.js"></script>
<script>
WebSocketStompMock = SockJS;
var client = Stomp.client('https://127.0.0.1:55674/stomp');
[...]
安装
Rabbitmq-Web-Stomp 是一个实验性插件。它不与 vanilla RabbitMQ 版本一起分发;您需要手动安装它。
- 您至少需要 Erlang R14(更多信息)。
- 您需要安装 Rabbitmq-server 2.8.2
- 获取所需的 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
- 接下来,将它们复制到 插件目录。例如,在我的 Ubuntu 机器上,这将是
sudo cp *.ez /usr/lib/rabbitmq/lib/rabbitmq_server-2.8.2/plugins
- 现在,您可以使用 rabbitmq-plugins 启用它们
sudo rabbitmq-plugins enable rabbitmq_web_stomp
sudo rabbitmq-plugins enable rabbitmq_web_stomp_examples
- 重新启动 rabbitmq 服务器。在 ubuntu 上
sudo /etc/init.d/rabbitmq-server restart
您可能已经注意到,我们启用了两个插件
- 首先是 RabbitMQ-web-stomp,它是主插件。它在端口 55674 上公开 SockJS 端点,例如:https://127.0.0.1:55674/stomp。
- 其次是 RabbitMQ-web-stomp-examples,它只托管一些带有示例的 javascript 和 html 文件。可以通过以下方式访问:https://127.0.0.1:55670/。
请记住,RabbitMQ-web-stomp 依赖于 RabbitMQ-STOMP,默认情况下它将绑定到端口 61613。
用法
如果您启用了 RabbitMQ-web-stomp-examples 插件,则应该能够立即运行我们准备的两个示例。只需在 https://127.0.0.1:55670/ 上打开一个 Web 浏览器。
总结
RabbitMQ-web-stomp 是一个非常简单的插件,但它打开了广泛的可能性,将 STOMP 协议公开给浏览器。
一如既往,欢迎反馈。我们也正在寻找更多示例的灵感!