Stomp协议学习与实战-1.1版

SpringBoot实现STOMP协议下的WebSocket 文章目录WebSocket简介STOMP简介上去就是干环境配置引入依赖新建WebSocket配置类新建保存用户认证信息的实体类MyPrincipalHandshakeHandler握手拦截器WebSocketHandshakeInterceptor消息通道拦截器服务端消息处理器广播式消息点对点式消息前端VUE实现 WebSocket简介 WebSocket 是 HTML5 开始提供的一种在单个 T... 阅读详情
最近工作中使用到Stomp协议,现在做个总结! 

Stomp是一个简单的消息文本协议,它的设计核心理念就是简单与可用性,官方文档: http://stomp.github.com/stomp-specification-1.1.html 

现在我们就来实践一下Stomp协议,你需要的是: 

1.一个支持stomp消息协议的messaging server,譬如activemq,rabbitmq,我用的是rabbitmq,关于rabbitmq-stomp的使用请参见这里
2.一个终端(譬如linux shell)
3.一些基本命令与操作(譬如nc,telnet) 

1.建立连接  
当我们(Client端)向服务器发送一个CONNECT Frame,就向服务器发起了一个连接请求,此时服务器端返回一个CONNECTED Frame表示建立连接成功,其中头字段version表示采用的stomp协议版本(这里默认是1.0) 

 
ps: ^@符号 ctrl+@键(用来提交请求),删除之前输入的数据 ctrl+n+backspace键  

当然Client端也可指定所支持的协议版本(accept-version字段,多个版本按递增顺序排列,并用逗号分隔); 

 

服务器此时返回的CONNECTED Frame中会列出它所支持的协议版本号中最高的那个(如上图的version:1.1) 

如果服务器端不支持客户端所列举的协议版本(比如这里的2.1),那么服务器会返回一个ERROR Frame并且列举出服务器自己所支持的协议版本(如下图的version:1.0,1.1) 

 


2.消息传递  
客户端一旦与服务器端建立连接,那么就可发送下列Frame进行消息传递 
SEND
SUBSCRIBE
UNSUBSCRIBE
ACK
NACK
BEGIN
COMMIT
ABORT
DISCONNECT

SEND Frame 用来将客户端消息发送到目的地(destination),因此它必须指定一个destination头字段,另外在所有头字段之后,新起一个空行,之后就是需要发送的消息(譬如这里的 hello stomp!) 

 

此时"hello stomp!" 这条消息就被发送到了队列 my_queue中去 

现在我们再起一个客户端clinet_a,来接受这个队列(myqueue)中的消息 

 

SUBSCRIBE Frame 表示客户端希望订阅某一个目的地(destination)的消息(这里是/queue/my_queue),其中头字段id表示在一个会话连接里,唯一标示一个订阅者(subscription),头字段destination标示该订阅者(subscription)需要订阅的目的地(这里是一个队列,/queue/my_queue) 

紧接着,我们就接受到服务器端发送来的消息(MESSAGE Frame),其中message_id:唯一标示了这条消息(后面我们会使用这个消息id进行ack,uack操作),content-length:标示消息体的长度,在所有这些头后面,新起一个空行就是消息内容(如这里的hello stomp!) 

如此时我们希望订阅另一个destination,该如何办呢?,是不是再发送一个SUBSCRIBE Frame就好了? 

 

结果发现服务器端返回了ERROR Frame 告诉我们SUBSCRIBE失败,原来同一个subscription id只能订阅一个destination,要想订阅令一个destination,必须先发送UNSUBSCRIBE Frame,然后再SUBSCRIBE 到新的目的地 

 

UNSCUBSCRIBE Frame中的id标示需要取消订阅的subscription,然后我们在订阅到新的destination(这里是/queue/other_queue),可以发现订阅成功,服务器没有再发送ERROR Frame 

至此,我们就模拟出了一个PTP(point-to-point)消息模型,下面我们也模拟下另外一个pub/sub消息模型: 

准备工作,新起两个连接订阅到/topic/my_topic上,如下图: 
clinet_a 
 

client b 
 

Send端发送广播消息: 
 

我们去检查下两个消息接收客户端,果然发现收到了这条广播消息^_^ 
client a 
 

client b 
 

默认情况下,只要服务器端发送消息,就认为客户端接收成功(即ack模式为auto),若我们需要更严格的消息保证,则必须采用client模式,即由客户端确认消息的接受 

服务器发送了一个消息到/queue/ackqueue 

 

此时我们的客户端client_a确实接受到了该消息 

 

虽然该消息已经发送到客户端,但是由于该消息没有确认(ack),则该消息还保存在队列/queue/ackqueue中(直到客户端确认才删除),我们可以通过rabbitmq提供的命令来查看(sudo rabbitmqctl list_queues name messages_ready   messages_unacknowledged ): 

 

若客户端在确认消息前与客户端断开连接,那么服务器可能(根据不同server的设计而不同)会选择将该消息发送给另一个subscription(这里是client_b) 

 

可以看出rabbit是选择将它发送给另一个subscription, 我们在使用命令查ack_queue队列中是否还有未确认的消息 

 

结果发现没有了 ^_^ 

若是客户端希望确认一个消息,该如何做呢?,只要发送一个ACK Frame即可! 
在ACK Frame中,subscription标示是谁确认消息,message-id标示是确认哪条消息(即MESSAGE Frame中携带的message-id) 

 

另外我在rabbitmq的测试结果发现,ack具有累积效应,譬如接收了10条消息,如果你ack了第8条消息,那么1-7条消息都会被ack,只有9-10两条消息还保持未ack状态 

除了有ACK Frame,还有NACK Frame,它表示客户端未成功接收某条消息,这时候服务器可以选择重发或者丢弃(对于rabbitmq,我的测试结果是选择重发) 


3.断开连接  
说完了连接的建立,消息的发送与接收,现在我们来看看客户端如何与服务器断开连接的,更重要的是如何安全的断开连接 

 

通过发送DISCONNNECT Frame表示向服务器发送一个断开连接请求,其中receipt表示服务器收到请求后请告知客户端,并返回一个相同的receipt-id 


至此关于Stmop绝大部分概念,我们已经实践完毕,如需更详细的还请翻阅官方文档 ^_^ 
SpringBoot学习-(十三)SpringBoot中建立WebSocket连接(STOMP) STOMP协议介绍STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互,类似于OpenWire(一种二进制协议)。由于其设计 阅读详情

相关推荐

WebSocket与STOMP通信技术详解

将WebSocket与STOMP结合使用,为实时Web应用提供了强大而灵活的通信基础。STOMP的标准化消息格式、路由机制和高级特性,弥补了原生WebSocket在应用层面的不足,使得构建复杂的实时系统变得更加简单和可靠。通过本文的Java Spring Boot和JavaScript示例,我们展示了如何在实际应用中集成WebSocket和STOMP,实现一个功能完整的实时聊天室。这仅仅是WebSocket+STOMP强大功能的一个简单示例,在实际应用中,它们可以支持更加复杂的消息交换模式和业务逻辑。

m0_53548081的博客 1111

Stomp协议学习与实战

最近工作中使用到Stomp协议,现在做个总结! Stomp是一个简单的消息文本协议,它的设计核心理念就是简单与可用性,官方文档:[url]http://stomp.github.com/stomp-specification-1.1.html[/url] 现在我们就来实践一下Stomp协议,你需要的是: 1.一个支持stomp消息协议的messaging server(譬如act...

积累点滴,成就梦想 979

Vue使用Stompjs监听并接收Activemq的信息

第一步:安装Stompjs和net npm install stompjs npm install net 第二步:新建连接Activemq参数文件 在config文件夹下新建一个linkparam文件 里面复制下面三句话 export const MQ_SERVICE = 'ws://192.168.x.x:61614/stomp' // mq服务地址 export const MQ_USERNAME = 'xx' // mq连接用户名 export const MQ_PASSWORD.

蜗牛~~ 5026

微信小程序使用stomp.js实现STOMP传输协议的实时聊天

本来使用websocket,后端同事使用了stomp协议,导致前端也需要对应修改。

你好!刘斩仙 5049

Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)

前言 这是一篇比较适合初学者学习的教程,如果你已经掌握,可以直接忽略。 很久很久以前写过一篇关于springboot 使用 websocket的文章 , 《SpringBoot 整合WebSocket 简单实战案例》 地址:https://blog.csdn.net/qq_35387940/article/details/93483678 最简单直接的模式整合websocket,文章里介绍了怎么后端给前端广播推送消息,也介绍了前端之间怎么点对点互相推送消息。反响不错。 后来...

默默不代表沉默 1万+

CS_STOMP:一维信号压缩与重构的STOMP算法实战

信号的稀疏性是压缩感知技术能够实现的关键前提,它指的是信号在某个变换域中只有少数的非零系数。这种特性使得信号可以在远低于奈奎斯特采样率的情况下被准确重构。在压缩感知中,稀疏性与观测矩阵的选择密切相关。观测矩阵用于将高维稀疏信号投影到一个较低维的空间,形成观测向量。这个过程可以视为一种信息压缩,它保留了信号中最重要的信息,同时去除了冗余。观测矩阵设计的原则包括:1. 与稀疏表示基的不相关性,以最大化信息保留。2. 与稀疏表示基的约束等距性,确保信号可被准确重建。

weixin_33506815的博客 1026

【stomp实战】Stomp协议介绍和客户端的使用

stomp介绍和客户端的使用

程序员笔记 7709

springboot websocket集群(stomp协议)连接时候传递参数

主要介绍了springboot websocket集群(stomp协议)连接时候传递参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

STOMP协议说明书-1.2版

说明 由于学习需要,本文是对STOMP协议规范1.2版的翻译记录。由于初学协议内容,翻译中如有不合适的地方,欢迎指正,谢谢! STOMP-1.2原文地址:http://stomp.github.io/stomp-specification-1.2.html 摘要 STOMP是一个专为实现客户端之间通过中间服务器进行异步通信的简单可操作的协议,它为这些互相通信客户端和

开发点滴 3735

STOMP协议详解1

1.个持stomp消息协议的messaging server(譬如activemq,rabbitmq) 3.些基本命令与操作(譬如nc,telnet) 1.建连

基于NE555的触摸延时开关电路设计与实现

本文详细介绍了基于NE555芯片的触摸延时开关电路设计与实现方法。通过分析NE555的单稳态工作模式,结合定时电阻、电解电容等关键元件选型,提供了一套完整的电路搭建方案。文章还包含抗干扰设计、调试技巧及常见故障处理,帮助电子爱好者快速掌握触摸延时灯的制作要点。

weixin_29268267的博客 788

STOMP协议1.2

STOMP 是一个简单的可互操作协议,设计用于异步消息传递,通过中介服务器在客户端之间进行。它定义了客户端和服务器之间传递消息的基于文本的线路格式。STOMP 已经活跃使用多年,并且被许多消息代理和客户端库支持。本规范定义了 STOMP 1.2 协议,并且是 STOMP 1.1 的更新。请将反馈发送至邮件列表。

xsgnzb的专栏 1521

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

y_u_yu_yu_的博客 1万+

Python STOMP客户端终极指南:stomp.py深度解析与实战教程

🚀 想要在Python应用中轻松实现消息传递和事件驱动架构吗?stomp.py作为Python生态中功能最全面的STOMP客户端库,支持STOMP 1.0、1.1和1.2协议版本,为您提供与ActiveMQ、RabbitMQ等主流消息代理的无缝集成体验。 ## 什么是STOMP协议与stomp.py? STOMP(Simple Text Oriented Messaging Protocol

gitblog_00759的博客 1135

基于Quartus II软件的FPGA综合实验——多功能数字钟

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、设计要求二、设计原理三、设计过程1.数码管扫描模块2.计时模块3.闹钟模块4.闹钟响铃模块5.数码管显示模块6.整点报时功能7.模式选择模块(计时器主控电路)四、实验中遇到的困难及解决方案五、总结 前言 FPGA综合实验——多功能数字钟 基于Quartus II软件 一、设计要求 设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与闹钟功能,能在设定的时间发出闹铃音,能非常方便地对小时、分钟和秒进.

qq_53022342的博客 2万+

时间同步中 TOD 与GPRMC和IRIG-B的区别

时间同步中 TOD 与GPRMC和IRIG-B的区别

ftdlk的博客 1724

STOMP协议详解

STOMP协议详解

jhfyuf的博客 4万+

Win11下Python脚本不执行?5分钟搞定PATH环境变量配置(VSCode终端实测)

本文针对Win11系统下VSCode终端中Python脚本执行无响应的问题,提供了详细的诊断与解决方案。核心在于正确配置PATH环境变量,通过图形化界面调整Python路径优先级,并分享了VSCode终端环境变量的刷新技巧,帮助开发者在5分钟内快速解决环境配置难题。

weixin_28358083的博客 384

WebSocket—STOMP详解(官方原版)

WebSocket—STOMP

深圳市多克创新科技有限公司 1万+

深入分析RAG知识库多模态数据预处理

多模态企业数据预处理是构建高质量RAG知识库的关键环节。本文详解了处理流程:1)文档格式识别与路由;2)多模态内容提取(文本、图像、音视频);3)结构解析与语义重建;4)数据清洗与增强;5)智能分块(强调语义完整性);6)元数据注入。推荐使用开源工具如PaddleOCR、Whisper、BLIP-2等,或商业API处理复杂场景,最终生成带丰富元数据的结构化内容,为后续向量化检索奠定基础。

qq_35354529的博客 1379

RT-DETR改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度

本文记录的是利用改进检测精度,详细说明了优化原因,注意事项等。原论文在红外小目标检测任务中,小目标在多次下采样操作中容易丢失关键信息。通过替代编码器和解码器基本组件中的传统卷积操作,更好地保留小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch si

Limiiiing的博客 1646

STOMP 协议简介

STOMP 协议 摘要 STOMP是一个简单的可互操作的协议, 被用于通过中间服务器在客户端之间进行异步消息传递。它定义了一种在客户端与服务端进行消息传递的文本格式. STOMP已经被使用了很多年,并且支持很多消息brokers和客户端库。这个规范定义STOMP1.2协议以及对1.1版本的更新。 概述 背景 由于需要用脚本语言如Ruby,Python,Perl去连接企业级的消息brok...

qq_39714973的博客 2959

UWB芯片DW3000之PDOA测向实现源码

本文详细介绍如何基于UWB芯片DW3000之PDOA测向的源码实现。

DT程序员的博客 2613

Spring 与使用STOMP消息

一、STOMP 像HTTP在TCP套接字之上添加了请求-响应模型层一样,STOMP在WebSocket之上提供了一个基于帧的线路格式(frame-based wireformat)层,用来定义消息的语义。 1.1 启用STOMP消息功能 WebSocketStompConfig使用了@EnableWebSocketMessageBroker注解。这表明这个配置类不仅配置了WebSocket...

书香水墨 3549

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: STOMP协议说明书-1.2版
下一篇: Nginx通过LUA脚本访问RabbitMQ消息队列
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值