码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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字符,这些字符将会被替换为%dd,dd的意思是16进制编码。


    二、Exchange类型目的地

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

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

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

    对于SEND命令,目的地格式为:/exchange/[/],格式说明如下:

    • 通过发送消息到名称为name的交换机上。

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


    三、Queue类型目的地

    对于简单队列,目的地格式为/queue/。

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

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

    四、AMQ Queue类型目的地

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

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

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


    五、Topic类型目的地

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

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

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

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

    stomp.default_topic_exchange = some.exchange
    
    • 1

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

    在这里插入图片描述

  • 相关阅读:
    操作系统 - 看完这篇还读不懂《银行家算法》那我也没办法了
    Databricks 收购 Tabular 的意义:数据开放框架的胜利
    基于症状自评量表SCL90的人才测评之心理素质测验
    从命令提示窗口使用 Visual C++ Toolkit 2003
    一位3年Java程序员的面试总结,挂了蚂蚁金服,却有幸拿到美团offer
    新建Mybatis项目
    zookeeper+kafka
    【Java面试】Mybatis中#{}和${}的区别是什么?
    linux 缺少动态链接库error while loading shared libraries
    iOS开发Swift-14-反向传值,右滑删除,语言本地化,编辑换序,DeBug,addTarget-待办事项App(3)...
  • 原文地址:https://blog.csdn.net/lingbomanbu_lyl/article/details/133091785
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号