当前位置: 首页 > news >正文

WebSocket的那些事(6- RabbitMQ STOMP目的地详解)

目录

  • 一、目的地类型
  • 二、Exchange类型目的地
  • 三、Queue类型目的地
  • 四、AMQ Queue类型目的地
  • 五、Topic类型目的地

一、目的地类型

在上节 WebSocket的那些事(5-Spring STOMP支持之连接外部消息代理)中我们已经简单介绍了各种目的地类型,如下图:
在这里插入图片描述
这一节我们来详细探讨一下各种目的地类型的区别。

MESSAGE报文中请求头destination的格式如下:

  • 发布到默认交换机的消息目的地格式为:/queue/queue_name
  • 发布到amp.topic交换机的消息目的地格式为:topic/routing_key
  • 其它所有消息目的地格式为:/exchange/exchange_name/routing_key

如果队列名、交换机名、路由key包含了/%或者非ascii字符,这些字符将会被替换为%dddd的意思是16进制编码。


二、Exchange类型目的地

任何exchange/queue或者exchange/routing-key的组合都可以通过前缀为/exchange的目的地来访问。

对于SUBSCRIBE命令,目的地格式为:/exchange/<name>[/<pattern>],格式说明如下:

  • name交换机上创建一个排它,自动删除的队列。
  • 如果<pattern>有指定,则以<pattern>为路由key绑定到名称为name的交换机上。

对于SEND命令,目的地格式为:/exchange/<name>[/<routing-key>],格式说明如下:

  • 通过<routing-key>发送消息到名称为name的交换机上。

备注:Exchange类型的目的地不适用于从已存在的队列消费信息。对于每个订阅者都会创建一个新的队列,并且通过指定的路由key绑定到指定的交换机。如果要消费已存在队列的消息,可以使用/amq/queue目的地。


三、Queue类型目的地

对于简单队列,目的地格式为/queue/<name>

Queue类型目的地只会把消息传递给最多一个订阅者,发送的消息如果没有消费者订阅将会一直入队,直到订阅者进行消费。

  • 对于SUBSCRIBE命令,该类型目的地会创建一个共享的名称为name的队列。
  • 对于SEND命令,名称为name的共享队列会在第一次发送消息到该类型的目的地时创建,消息将会根据路由keyname发送到默认交换机上。

四、AMQ Queue类型目的地

如果要发送或者订阅不由STOMP适配器管理的已存在队列的消息,消息目的地格式为/amq/queue/<name>,说明如下:

  • 对于SENDSUBSCRIBE命令,不会创建队列。如果队列不能存在,使用SUBSCRIBE队列会报错。
  • 对于SEND命令,消息会经由默认交换机直接发送已经存在的名称为name的队列上。
  • 对于SUBSCRIBE命令,针对已存在的名称为name的队列订阅会基于当前STOMP会话建立。

备注:如果没有指定任何队列参数,队列将会被认定持久、非排它、非自动删除。


五、Topic类型目的地

STOMP客户端用的最多的目的地类型就是/topic/<name>,该类型的目的地可以路由消息到多个订阅者,发送到Topic类型目的地的消息如果没有订阅者订阅,将会被丢弃。

关于Topic类型目的地的格式说明如下:

  • 对于SEND命令,消息会通过路由key<name>发送到amp.topic交换机上。
  • 对于SUBSCRIBE命令,首先会创建一个自动删除和非持久化的队列,然后会将该队列通过路由key<name>绑定到amp.topic交换机上。

可以通过stomp.default_topic_exchange参数可以修改默认Topic交换机的名称,如下:

stomp.default_topic_exchange = some.exchange

更多关于目的地类型的说明可以参考:RabbitMQ STOMP插件说明。

在这里插入图片描述

http://www.lryc.cn/news/179610.html

相关文章:

  • SQL SELECT 语句基础
  • golang工程——protobuf使用及原理
  • CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明
  • 免费 AI 代码生成器 Amazon CodeWhisperer 初体验
  • 谷歌扩展下载
  • Mac上如何修复损坏的音频?试试iZotope RX 10,对音频进行处理,提高音频质量!
  • Mysql各种锁
  • 【算法导论】快速排序
  • QT之QScriptEngine的用法介绍
  • vim 工具的使用
  • RPA有什么优势?RPA的8大优势!建议学习!
  • 初级篇—第二章SELECT查询语句
  • PostMan的学习
  • 配置OSPF路由
  • CCF CSP认证 历年题目自练Day17
  • 基于Matlab实现多因子选股模型(附上源码+数据)
  • 【中秋国庆不断更】OpenHarmony多态样式stateStyles使用场景
  • Qt扩展-QCustomPlot绘图基础概述
  • 二、局域网联机
  • 决策树剪枝:解决模型过拟合【决策树、机器学习】
  • Ubuntu部署运行ORB-SLAM2
  • 二十,镜面IBL--打印BRDF积分贴图
  • 自动驾驶:未来的道路上的挑战与机遇
  • Go 语言 iota 的神奇力量
  • 前端开发和后端开发的一些建议
  • 基于 SpringBoot+Vue 的教室人事档案管理系统
  • Lua学习笔记:require非.lua拓展名的文件
  • Python 编程基础 | 第三章-数据类型 | 3.3、浮点数
  • beego---ORM相关操作
  • 【网络原理】初始网络,了解概念