RabbitMQ插件详解:rabbitmq_web_stomp【RabbitMQ 六】

打印 上一主题 下一主题

主题 543|帖子 543|积分 1629


   欢迎来到我的博客,代码的天下里,每一行都是一个故事  



  
前言

RabbitMQ一直是消息传递的先锋,在其浩繁插件中,rabbitmq_web_stomp无疑是一颗璀璨的明珠。这个插件为我们提供了基于WebSocket的STOMP协议支持,为实现实时、双向通讯打开了崭新的可能性。本文将带你进入RabbitMQ Web STOMP的神奇天下,揭开消息传递的新篇章。
STOMP协议简介

STOMP(Simple Text Oriented Messaging Protocol)协议简介

STOMP(Simple Text Oriented Messaging Protocol)是一种用于在应用步伐之间进行异步消息传递的简单文本协议。它设计简单、易于实现,是一种基于文本的协议,以简化消息传递的过程。
STOMP协议的特点包括:

  • 简单性: STOMP协议的设计目标之一是简单性,使其易于实现和使用。
  • 文本协议: STOMP基于文本,消息以文本情势进行编码,便于人类可读,并使其易于调试。
  • 协议独立性: STOMP协议是协议独立的,它可以在多种底层传输协议上运行,例如TCP、WebSocket等。
  • 异步消息传递: STOMP协议支持异步消息传递,允许客户端和服务器通过消息进行通讯。
STOMP与WebSocket的关系

WebSocket是一种全双工通讯协议,它在客户端和服务器之间提供了实时的、双向的通讯通道。相比之下,STOMP是一种简单的文本协议,专注于异步消息传递。
WebSocket和STOMP可以一起使用,将WebSocket作为底层传输协议,而STOMP作为消息传递的协议。通过这种组合,可以在Web应用步伐中实现实时的、异步的消息传递。
WebSocket提供了一个长期化的毗连,而STOMP定义了一种消息传递的格式和协议。这种组合在实时Web应用步伐、聊天应用、关照系统等场景中非常有效,使得欣赏器和服务器可以或许进行实时的双向通讯。通常,WebSocket用于底层通讯,而STOMP用于定义消息的格式和语义。
WebSocket和RabbitMQ

WebSocket在现代Web应用中的作用

WebSocket是一种在Web欣赏器和服务器之间提供双向通讯的协议。相比于传统的HTTP协议,WebSocket在实时性、效率和性能上提供了更好的办理方案。以下是WebSocket在现代Web应用中的一些主要作用:

  • 实时性: WebSocket允许客户端和服务器之间创建长期性的毗连,实现实时双向通讯。这使得Web应用步伐可以或许及时推送数据,而不需要客户端轮询服务器。
  • 双向通讯: WebSocket提供了双向通讯的本领,客户端和服务器可以同时向对方发送消息。这对于实时协作、聊天应用、实时数据展示等场景非常有效。
  • 减少网络延迟: 由于WebSocket创建的是长期毗连,相比于传统的HTTP哀求-相应模型,减少了每次通讯都要创建新毗连的开销,低落了网络延迟。
  • 低落服务器负担: WebSocket的长期毗连使得服务器不再需要处理大量的短暂毗连,低落了服务器的负担,提高了服务器的性能。
  • 更少的带宽消耗: WebSocket的通讯头部相对较小,相比于HTTP哀求头,带宽消耗更少,这对于移动设备和带宽有限的网络情况更为重要。
RabbitMQ中支持WebSocket的意义

RabbitMQ是一种消息队列中心件,用于在分布式系统中传递消息。支持WebSocket意味着可以通过WebSocket协议直接毗连到RabbitMQ服务器,实现实时的、双向的消息通讯。这对于一些特定的应用场景和Web应用步伐非常有意义:

  • 实时关照和更新: 使用WebSocket毗连到RabbitMQ,可以实现实时的关照和更新,例如在消息队列中有新消息时,即时推送到客户端,而不需要客户端轮询。
  • Web应用集成: 对于Web应用步伐,通过WebSocket直接毗连到RabbitMQ可以简化架构,减少中心层,提高实时性,同时低落服务器的负担。
  • 即时通讯: 在需要即时通讯的场景中,使用WebSocket毗连到RabbitMQ可以提供更快的消息传递速率,实现实时的聊天和消息推送。
  • WebSockets over AMQP: RabbitMQ也支持通过AMQP(高级消息队列协议)的WebSocket扩展进行通讯,如许可以更灵活地与RabbitMQ集成。
综合来说,WebSocket与RabbitMQ的联合使得在分布式系统中更容易实现实时通讯和消息传递,为现代Web应用提供更好的用户体验。
安装和配置rabbitmq_web_stomp插件

安装步调:


  • 查抄 RabbitMQ 版本: RabbitMQ Web STOMP 插件通常需要 RabbitMQ 3.6.0 或更新版本。确保你的 RabbitMQ 版本符合要求。
  • 开启 RabbitMQ 管理插件: 在开始之前,确保已经安装并启用 RabbitMQ 的管理插件。你可以通过以下命令启用管理插件:
    1. rabbitmq-plugins enable rabbitmq_management
    复制代码
    重启 RabbitMQ 以使更改生效。
  • 下载插件: RabbitMQ Web STOMP 插件通常是通过 GitHub 上的 RabbitMQ GitHub 仓库获取的。你可以在 https://github.com/rabbitmq/rabbitmq-web-stomp 找到插件的源码和下载阐明。
  • 安装插件: 下载插件后,使用以下命令将其安装到 RabbitMQ 中:
    1. rabbitmq-plugins enable rabbitmq_web_stomp
    复制代码
    这会将 Web STOMP 插件安装到 RabbitMQ。
  • 重启 RabbitMQ: 在安装插件后,务必重新启动 RabbitMQ 以应用更改:
    1. service rabbitmq-server restart
    复制代码
配置 RabbitMQ 以支持 Web STOMP:


  • 编辑 RabbitMQ 配置文件: 打开 RabbitMQ 的配置文件,通常位于 /etc/rabbitmq/rabbitmq.config。如果文件不存在,可以手动创建。
    1. sudo nano /etc/rabbitmq/rabbitmq.config
    复制代码
  • 添加 Web STOMP 配置: 在配置文件中添加 Web STOMP 的配置。以下是一个简单的例子:
    1. [
    2.   {rabbit, [
    3.     {loopback_users, []}
    4.   ]},
    5.   {rabbitmq_web_stomp, [
    6.     {tcp_listeners, [61613]}
    7.   ]}
    8. ].
    复制代码
    这个例子中,我们允许全部用户毗连,监听端口为 61613。
  • 生存并退出: 生存配置文件并退出编辑器。
  • 重启 RabbitMQ: 重启 RabbitMQ 以使新配置生效:
    1. service rabbitmq-server restart
    复制代码
  • 验证配置: 打开 RabbitMQ 管理界面(http://localhost:15672/),登录并导航到 “STOMP Connections” 选项卡。你应该看到 Web STOMP 插件的相关信息。
如今,RabbitMQ 已经配置支持 Web STOMP,并可以通过 WebSocket 毗连进行通讯。在你的 Web 应用步伐中,你可以使用支持 STOMP 协议的客户端库,例如 stompjs,与 RabbitMQ 进行实时通讯。
RabbitMQ Web STOMP插件的作用和上风

1. 实现实时双向通讯

RabbitMQ Web STOMP插件通过支持STOMP协媾和WebSocket技能,使得在分布式系统中实现实时、双向的通讯成为可能。传统的消息队列在实时性方面可能存在一定的延迟,而Web STOMP通过WebSocket提供了更快速的消息传递机制,适用于需要即时相应的场景。
2. 轻松集成到Web应用

通过WebSocket和STOMP协议,Web STOMP插件可以或许轻松地集成到现有的Web应用中。这为开辟者提供了一种简单而强大的方式,使得Web应用可以或许更直接地与RabbitMQ进行通讯,实现实时消息的推送和拉取。
3. 办理欣赏器同源计谋限定

在Web开辟中,由于欣赏器的同源计谋,直接在欣赏器中进行跨域的WebSocket毗连是有一定限定的。RabbitMQ Web STOMP插件提供了一种通过HTTP握手的方式来创建WebSocket毗连的方法,从而绕过了同源计谋的限定,使得跨域通讯更加便捷。
4. 支持异构系统集成

RabbitMQ作为消息中心件,支持多种编程语言和平台。Web STOMP插件的引入使得差别系统、差别平台之间的实时通讯更为灵活,可以轻松实现异构系统之间的集成和消息交互。
5. 提升用户体验

对于需要实时更新的应用场景,如在线聊天、实时监控等,使用RabbitMQ Web STOMP插件可以或许提升用户体验,使得用户可以或许更即时地获取到最新的信息,增加应用的实时性和交互性。
6. 灵活的消息传递模式

Web STOMP支持多种消息传递模式,包括点对点的消息推送、订阅-发布模式等,开辟者可以根据应用的需求选择最适合的消息传递模式,提高系统的灵活性和可扩展性。
通过这些上风,RabbitMQ Web STOMP插件在实时消息传递范畴发挥偏重要的作用,办理了一系列与实时通讯相关的痛点,为开辟者提供了更强大的工具来构建实时性强、高度互动的Web应用。
适用场景

RabbitMQ Web STOMP插件通常在需要实现实时双向通讯、提升用户体验以及办理一些特定场景下的痛点时使用。以下是一些典型的应用场景:

  • 即时聊天应用:

    • RabbitMQ Web STOMP插件适用于构建在线聊天应用,实现用户之间的实时消息传递。通过WebSocket技能,可以使得聊天消息的推送更加实时,提高用户聊天体验。

  • 实时监控与关照:

    • 在需要实时监控系统状态、告警关照的场景中,Web STOMP插件可以作为可靠的消息传递机制。系统状态变化或者告警事件发生时,通过Web STOMP插件可以及时地将消息推送给相关的用户或监控系统。

  • 在线协作与编辑:

    • 对于需要多人在线协作编辑的场景,Web STOMP插件可以用于实现实时的文档同步。多个用户在编辑同一个文档时,可以通过Web STOMP插件实时地同步各自的编辑内容,提高协作效率。

  • 股票行情和金融数据推送:

    • 在金融范畴,特殊是股票行情和实时金融数据的推送场景中,Web STOMP插件可以用于将实时的市场数据快速推送给客户端,使得投资者可以或许及时获取到最新的行情信息。

  • 在线游戏:

    • 在在线游戏中,Web STOMP插件可以作为实时消息传递的工具,用于处理玩家之间的交互、游戏状态的同步等。通过WebSocket技能,可以低落消息传递的延迟,提升游戏的实时性。

  • 物联网应用:

    • 在物联网场景下,需要设备之间实时通讯,例如传感器数据的实时传输、设备状态的监控等。Web STOMP插件可以作为可靠的消息传递中心件,支持设备之间的实时通讯。

总体而言,当应用场景需要实现实时消息传递、即时通讯以及提升用户体验时,RabbitMQ Web STOMP插件就成为一个强大而符合的选择。
websockt可以实现,为啥还要引入这个?

确实,WebSocket本身已经提供了实时双向通讯的本领,而且在很多场景下,直接使用WebSocket就足够满意需求。然而,引入RabbitMQ及其Web STOMP插件的原因主要有以下几点:

  • 消息队列的上风:
    RabbitMQ是一款强大的消息队列系统,具有高度可靠性、长期性、消息确认和队列管理等特性。在一些复杂的应用场景中,使用消息队列可以或许更好地处理消息的分发、路由和长期化等问题。
  • 解耦和可扩展性:
    RabbitMQ作为消息中心件,提供了一种解耦应用组件的方式。通过引入消息队列,差别的应用组件可以独立工作,相互之间通过消息进行通讯,从而提高系统的可扩展性和灵活性。
  • 消息的长期化:
    RabbitMQ支持消息的长期化,即使在生产者将消息发送到队列后,即使消费者当前不在线,消息也会被保留。这对于一些重要的关照和数据同步场景非常重要。
  • 消息过滤和路由:
    RabbitMQ提供了灵活的消息过滤和路由机制,可以或许根据消息的属性、内容等进行灵活的路由和过滤。这使得消息可以有选择性地发送到特定的队列,满意差别场景的需求。
  • 整合现有系统:
    在已有的系统中引入RabbitMQ,可以或许更容易地整合现有的应用,而不需要大规模地改动现有代码。Web STOMP插件作为RabbitMQ的一部分,提供了轻量级、基于WebSocket的实时通讯机制,是现代化应用的一部分。
总体来说,引入RabbitMQ及其Web STOMP插件的决定取决于具体的业务需求和系统架构。在一些复杂的分布式系统中,消息队列的上风可能更为明显。在一些简单的应用中,直接使用WebSocket可能已经足够。选择符合的技能栈需要综合思量系统的特点和未来的发展方向。
实现实时消息传递

要实现实时消息传递,你可以使用 JavaScript 客户端毗连到 RabbitMQ 的 Web STOMP 插件。以下是毗连到 Web STOMP、发布消息和订阅消息的根本操作。
使用 JavaScript 客户端毗连到 Web STOMP:


  • 引入 stompjs 库: 在你的项目中引入 stompjs 库,你可以通过 CDN 或包管理工具安装:
    1. <!-- 使用 CDN 引入 stompjs -->
    2. <script src="https://cdn.jsdelivr.net/npm/@stomp/stompjs"></script>
    复制代码
    或者通过 npm 安装:
    1. npm install @stomp/stompjs
    复制代码
  • 创建毗连: 在你的 JavaScript 代码中创建一个毗连到 RabbitMQ 的 Web STOMP 的客户端:
    1. const client = new StompJs.Client({
    2.   brokerURL: 'ws://your-rabbitmq-server:15674/ws',
    3.   connectHeaders: {
    4.     login: 'your-username',
    5.     passcode: 'your-password',
    6.   },
    7.   debug: function (str) {
    8.     console.log(str);
    9.   },
    10.   reconnectDelay: 5000,
    11.   heartbeatIncoming: 4000,
    12.   heartbeatOutgoing: 4000,
    13. });
    复制代码
    请替换 your-rabbitmq-server, your-username, 和 your-password 为实际的 RabbitMQ 服务器地址、用户名和密码。
  • 毗连到 RabbitMQ: 使用 client.activate() 毗连到 RabbitMQ:
    1. client.activate();
    复制代码
    这将激活毗连,并开始监听消息。
发布消息:

  1. // 定义消息内容
  2. const message = { text: 'Hello, RabbitMQ!' };
  3. // 发布消息到指定的队列
  4. client.publish({ destination: '/exchange/your-exchange-name/your-routing-key', body: JSON.stringify(message) });
复制代码
请将 your-exchange-name 替换为实际的互换机名称,your-routing-key 替换为实际的路由键。
订阅消息:

  1. // 订阅消息
  2. const subscription = client.subscribe('/exchange/your-exchange-name/your-routing-key', (message) => {
  3.   console.log('Received message:', JSON.parse(message.body));
  4. });
  5. // 在需要取消订阅时执行
  6. // subscription.unsubscribe();
复制代码
同样,将 your-exchange-name 替换为实际的互换机名称,your-routing-key 替换为实际的路由键。
通过这些根本操作,你可以在 JavaScript 客户端实现毗连到 RabbitMQ 的 Web STOMP,发布消息和订阅消息,实现实时消息传递。在实际项目中,你可能需要更多的错误处理和其他功能,这取决于你的应用步伐需求。
应用场景:即时聊天

实现即时聊天功能涉及到多用户和多房间的管理,通过 Web STOMP 毗连到 RabbitMQ 可以为实时聊天提供强大的消息传递底子。以下是一个简单的实时聊天的例子,包括多用户和多房间的实现方式。
多用户、多房间的即时聊天示例:


  • 前端代码: 使用 stompjs 库毗连到 RabbitMQ 的 Web STOMP 并处理聊天消息。
    1. <script src="https://cdn.jsdelivr.net/npm/@stomp/stompjs"></script><script>  const username = prompt('Enter your username:'); // 用户输入用户名  const client = new StompJs.Client({    brokerURL: 'ws://your-rabbitmq-server:15674/ws',    connectHeaders: {      login: 'your-username',      passcode: 'your-password',    },  });  client.onConnect = () => {    // 毗连乐成,订阅消息    client.subscribe('/exchange/chat/global', (message) => {      const msg = JSON.parse(message.body);      displayMessage(msg.username, msg.text);    });  };  client.activate();
    2.   function sendMessage() {    const message = document.getElementById('message').value;    client.publish({      destination: '/exchange/chat/global',      body: JSON.stringify({ username, text: message }),    });    document.getElementById('message').value = '';  }  function displayMessage(sender, text) {    const chatArea = document.getElementById('chat-area');    const messageElement = document.createElement('p');    messageElement.textContent = `${sender}: ${text}`;    chatArea.appendChild(messageElement);  }</script>
    复制代码
  • 后端代码: 使用任意后端语言实现 WebSocket 服务,将聊天消息转发给 RabbitMQ。
    1. # 以 Python Tornado 框架为例
    2. import tornado.ioloop
    3. import tornado.web
    4. import tornado.websocket
    5. import pika
    6. class ChatHandler(tornado.websocket.WebSocketHandler):
    7.     def open(self):
    8.         print('WebSocket opened')
    9.     def on_message(self, message):
    10.         # 将接收到的消息发送到 RabbitMQ
    11.         connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    12.         channel = connection.channel()
    13.         channel.basic_publish(exchange='chat', routing_key='global', body=message)
    14.         connection.close()
    15. app = tornado.web.Application([
    16.     (r'/chat', ChatHandler),
    17. ])
    18. if __name__ == '__main__':
    19.     app.listen(8888)
    20.     tornado.ioloop.IOLoop.current().start()
    复制代码
  • RabbitMQ 配置: 配置 RabbitMQ 以支持多用户和多房间的聊天。
    1. [
    2.   {rabbit, [
    3.     {loopback_users, []}
    4.   ]},
    5.   {rabbitmq_web_stomp, [
    6.     {tcp_listeners, [61613]}
    7.   ]}
    8. ].
    复制代码
  • 多用户、多房间支持: 在实际应用中,可以通过在前端界面中提供选择用户和房间的功能,根据用户和房间发送和吸收消息。
这个示例演示了一个简单的即时聊天功能,毗连到 RabbitMQ 的 Web STOMP 实现实时消息传递。在实际应用中,你可能需要更多的功能,例如用户管理、房间管理、消息汗青记录等,这取决于你的应用需求。
总结:

通过学习本文,你将深入了解RabbitMQ中rabbitmq_web_stomp插件的精华。从协议底子到实际应用,我们一起揭示了这个插件的神奇之处。无论你是新手还是有经验的开辟者,RabbitMQ Web STOMP都将为你带来更灵活、高效的消息传递办理方案。让我们一同跳进这场打破边界的消息传递之舞吧!
结语

深深感谢你阅读完整篇文章,希望你从中获得了些许劳绩。如果以为有价值,欢迎点赞、收藏,并关注我的更新,等待与你共同分享更多技能与思索。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表