基于 WebSocket 的 AMQP 1.0
我们很高兴宣布在 VMware Tanzu RabbitMQ 4.1 中支持基于 WebSocket 的 AMQP 1.0。
此功能使任何基于浏览器的应用程序都可以使用 AMQP 1.0 与 RabbitMQ 通信,为各种高效的基于浏览器的业务消息传递场景铺平了道路。
我们很高兴宣布在 VMware Tanzu RabbitMQ 4.1 中支持基于 WebSocket 的 AMQP 1.0。
此功能使任何基于浏览器的应用程序都可以使用 AMQP 1.0 与 RabbitMQ 通信,为各种高效的基于浏览器的业务消息传递场景铺平了道路。
在 RabbitMQ 总部,我们长期以来一直在努力寻找一种在 Web 浏览器中公开消息传递的好方法。过去,我们尝试过很多方法,从古老而著名的 JsonRPC 插件(基本上通过 AJAX 公开 AMQP),到 Rabbit-Socks(试图创建一个通用的协议中心),再到管理插件(可用于执行从浏览器发送和接收消息等基本操作)。
随着时间的推移,我们了解到 Web 上的消息传递与我们习惯的消息传递非常不同。我们之前的尝试都没有真正解决这个问题,而且 Web 上的消息传递在一段时间内可能仍然无法完全解决。
话虽如此,RabbitMQ 用户一直在询问一件简单的事情,虽然不完美,但远非在浏览器中进行消息传递的最糟糕方式:通过 Websockets 公开 STOMP。
或者:如何在 WebSockets 或 SockJS 上正确进行多路复用
您可能知道,WebSockets 是一项很酷的全新 HTML5 技术,它允许您异步发送和接收消息。我们的兼容层 - SockJS - 模拟了它,即使在旧浏览器或代理后面也能工作。从概念上讲,WebSockets 非常简单。API 基本上是:连接、发送和接收。但是,如果您的 Web 应用程序有许多模块,并且每个模块都希望能够发送和接收数据,该怎么办?
AtomizeJS 是一个 JavaScript 库,用于编写在浏览器中运行的分布式程序,而无需在服务器上编写任何特定于应用程序的逻辑。
在 RabbitMQ 总部,我们花了很多时间争论。偶尔,争论的是重要的事情,例如消息传递的真正含义,以及可用于实现消息传递的不同 API 的范围。RabbitMQ 和 AMQP 为消息传递提供了一个非常明确的接口:您确实有动词发送和接收,并且您需要考虑您的消息传递模式是什么。在底层发生了很多(通常是非常聪明的事情),但尽管如此,接口还是相当低级和明确的,这提供了良好的灵活性。但有时,这种 API 风格并不是您尝试解决的问题最自然的匹配 - 您真的会陷入僵局并思考“我这里需要的是 AMQP 消息代理”,还是您从先前的知识中意识到您可以选择使用 AMQP 消息代理来解决您当前的问题?
SockJS 0.2 版本已发布
您可以在常用的 playground 中进行测试
我们一直在想如何向更广泛的受众介绍 SockJS 及其可能性。有一个可用的演示比解释 枯燥的理论更有价值,但是如果你只是一个枯燥的技术专家,没有任何设计技能,你能展示什么呢?
对于这样的问题,最好打开历史书,回顾一下上一代没有艺术技能的计算机极客。他们在做什么?在带有绿色字母的控制台上,他们玩着极客电脑游戏,MUD(多人地下城)尤其受欢迎。
嘿,我们可以做到!
最近 Web 技术领域发生了很多热门事件。JavaScript 似乎正在扛起大旗,无论是在浏览器端还是服务器端。在 RabbitMQ 总部,我们对消息传递广泛领域的发展很感兴趣,并且我们对 JavaScript 在消息传递方面的角度感到特别兴奋 - 即 WebSockets 和相关技术。
我被要求在 PubSubHuddle 聚会上做一个简短的演示。演讲内容是关于 WebSockets 的当前发展、其问题以及使用它们构建 Web 应用程序。
WebSocket 技术正在迎头赶上,但所有浏览器都支持它还需要一段时间。与此同时,有许多项目旨在替代 WebSockets,并为 Web 应用程序启用“实时”功能。但是所有尝试都只解决了通用问题的一部分,并且没有任何单一的解决方案可以工作、可扩展且不需要特殊的部署技巧。
“实时 Web”或使用 Web 浏览器进行消息传递的想法已经存在很长时间了。最初它被称为“长轮询”,然后是“Comet”,最新的化身被称为“WebSockets”。毫无疑问,它正朝着好的方向发展,WebSockets 是一项很棒的技术。
但是在争取实时功能的过程中,我们已经失去了对真正重要的东西的关注,即如何实际使用消息传递。在 Web 环境中,一切都是请求-响应驱动的,将典型的 Web 堆栈与异步消息传递结合起来并非易事。