消息队列的两种模式

2023-11-08

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
点对点与发布订阅最初是由JMS定义的。这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅)

1、定义

JMS规范目前支持两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)。

1.1、点对点:Queue,不可重复消费

消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。
消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。


1.2、发布/订阅:Topic,可以重复消费

消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。

支持订阅组的发布订阅模式:
发布订阅模式下,当发布者消息量很大时,显然单个订阅者的处理能力是不足的。实际上现实场景中是多个订阅者节点组成一个订阅组负载均衡消费topic消息即分组订阅,这样订阅者很容易实现消费能力线性扩展。可以看成是一个topic下有多个Queue,每个Queue是点对点的方式,Queue之间是发布订阅方式。

2、区别

2.1、点对点模式

生产者发送一条消息到queue,一个queue可以有很多消费者,但是一个消息只能被一个消费者接受,当没有消费者可用时,这个消息会被保存直到有 一个可用的消费者,所以Queue实现了一个可靠的负载均衡。

2.2、发布订阅模式

发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到这个消息的拷贝。

3、流行模型比较

传统企业型消息队列ActiveMQ遵循了JMS规范,实现了点对点和发布订阅模型,但其他流行的消息队列RabbitMQ、Kafka并没有遵循JMS规范。

3.1、RabbitMQ

RabbitMQ实现了AQMP协议,AQMP协议定义了消息路由规则和方式。生产端通过路由规则发送消息到不同queue,消费端根据queue名称消费消息。
RabbitMQ既支持内存队列也支持持久化队列,消费端为推模型,消费状态和订阅关系由服务端负责维护,消息消费完后立即删除,不保留历史消息。

(1)点对点
生产端发送一条消息通过路由投递到Queue,只有一个消费者能消费到。


(2)多订阅
当RabbitMQ需要支持多订阅时,发布者发送的消息通过路由同时写到多个Queue,不同订阅组消费不同的Queue。所以支持多订阅时,消息会多个拷贝。


3.2、Kafka

Kafka只支持消息持久化,消费端为拉模型,消费状态和订阅关系由客户端端负责维护,消息消费完后不会立即删除,会保留历史消息。因此支持多订阅时,消息只会存储一份就可以了。但是可能产生重复消费的情况。

(1)点对点&多订阅
发布者生产一条消息到topic中,不同订阅组消费此消息。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

消息队列的两种模式 的相关文章

  • 大牛总结超详细的RabbitMQ入门,看这篇文章就够了!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 前情提示 二 ack机制回顾 三 ack机制实现原理 delivery tag 四 RabbitMQ如何感知仓储服务实例宕机 五 仓储服务处理失败时的消息重
  • 《消息队列高手课》如何实现高性能的异步网络传输?

    我们开发的绝大多数业务系统 它都是 IO 密集型系统 跟 IO 密集型系统相对的另一种系统叫计算密集型系统 通过这两种系统的名字 估计你也能大概猜出来 IO 密集型系统是什么意思 IO 密集型系统大部分时间都在执行 IO 操作 这个 IO
  • 选Redis做MQ的人,是脑子里缺根弦儿吗?

    V xin ruyuan0330 获得600 页原创精品文章汇总PDF 目录 一 前情提示 二 unack消息的积压问题 三 如何解决unack消息的积压问题 四 高并发场景下的内存溢出问题 五 低吞吐量问题 六 合理设置prefetch
  • RabbitMQ与KafKa区别

    在应用场景方面 RabbitMQ 遵循AMQP协议 由内在高并发的erlanng语言开发 用在实时的对可靠性要求比较高的消息传递上 kafka是Linkedin于2010年12月份开源的消息发布订阅系统 它主要用于处理活跃的流式数据 大数据
  • RabbitMQ和Kafka比较

    1 Kafka可以保证顺序处理消息 RabbitMQ相对较弱 2 在消息路由和过滤方面 RabbitMQ提供了更好的支持 3 RabbitMQ有消息存活时间 TTL 和延迟 预定消息功能 Kafka没有 4 在消息留存方面 RabbitMQ
  • 《消息队列高手课》内存管理:如何避免内存溢出和频繁的垃圾回收?

    不知道你有没有发现 在高并发 高吞吐量的极限情况下 简单的事情就会变得没有那么简单了 一个业务逻辑非常简单的微服务 日常情况下都能稳定运行 为什么一到大促就卡死甚至进程挂掉 再比如 一个做数据汇总的应用 按照小时 天这样的粒度进行数据汇总都
  • 【RocketMQ】设计理念与核心概念扫盲

    RocketMQ 设计理念与核心概念扫盲 文章目录 RocketMQ 设计理念与核心概念扫盲 一 RocketMQ的设计理念和目标 1 1 设计理念 1 2 设计目标 二 RocketMQ的核心概念扫盲篇 2 1 部署架构 2 1 1 Na
  • rocketmq安装、启动

    1 下载 gt wget http mirror bit edu cn apache rocketmq 4 4 0 rocketmq all 4 4 0 source release zip gt unzip rocketmq all 4
  • RabbitMQ优秀博文整理

    1 关于主流MQ的介绍 各MQ的优缺点 MQ的使用选举等 MQ消息队列详解 四大MQ的优缺点分析 从百草园杀到三味书屋 的博客 CSDN博客 几种消息队列的优缺点 2 RabbitMQ常见问题的整理 以及解决思路 图文并茂 比较详细 Rab
  • 【不是拷贝】rabbitmq安装延迟队列插件rabbitmq_delayed_message_exchange

    1 查看当前rabbitmq已安装的插件 查看当前的rabbitmq 安装了哪些插件 rabbitmq plugins list root yq test1 rabbitmq plugins list Configured E explic
  • MQ线上平滑迁移方案

    一 迁移的问题点 1 多生产者 多消费者切换排期跨度较大 场景一 多个生产者 一个消费者 如何保证多个生产者不同排期切换平滑稳定过渡 不漏消费 不重复消费 场景二 一个生产者 多个消费者 如何保证多个消费者不同排期切换平滑稳定过渡 不漏消费
  • kafka 应用实战

    一 Java 中使用 kafka 进行通信 依赖
  • 《消息队列高手课》缓存策略:如何使用缓存来减少磁盘IO?

    现代的消息队列 都使用磁盘文件来存储消息 因为磁盘是一个持久化的存储 即使服务器掉电也不会丢失数据 绝大多数用于生产系统的服务器 都会使用多块儿磁盘组成磁盘阵列 这样不仅服务器掉电不会丢失数据 即使其中的一块儿磁盘发生故障 也可以把数据从其
  • rocketMq介绍和安装

    rocketMq介绍和安装 Mq介绍 MQ MessageQueue 消息队列 队列 是一种FIFO 先进先出的数据结构 消息由生产者发送到MQ进行排队 然后按原来的顺序交由消息的消费者进行处理 QQ和微信就是典型的MQ MQ的作用 主要有
  • RocketMQ的消息优先级

    有些场景 需要应用程序处理几种类型的消息 不同消息的优先级不同 RocketMQ是个先入先出的队列 不支持消息级别或者Topic级别的优先级 业务中简单的优先级需求 可以通过间接的方式解决 下面列举三种优先级相关需求的具体处理方法 第一种
  • mq的基本介绍和基本用法

    1 什么是MQ 有什么用 MQ 是message queue 消息队列 也叫消息中间件 遵守JMS java message service 规范的一种软件 同时还有另一个叫AMQP的应用层协议 语言无关性不受产品 语言等限制 rabbit
  • Java EE 容器中的同步请求-应答模式

    我希望在 Java EE 容器内使用 JMS 实现同步请求 答复模式 顺序会是这样的 浏览器向 Web 应用程序发出数据请求 这是一个阻塞请求 比如在线程 T1 上 Web 应用程序需要连接到远程 Web 服务才能满足上述请求 因此 它形成
  • 通过 .net 客户端通过 SSL 连接到 IBM MQ

    我正在尝试通过 NET 客户端连接到 MQ 服务器队列 我需要使用证书进行安全通信 这是我的代码 MQEnvironment SSLKeyRepository SYSTEM MQEnvironment ConnectionName conn
  • 以编程方式设置 mosquitto 中的访问控制限制

    我正在开发一个将使用 mqtt 的应用程序 我将使用 python 库 我一直倾向于使用 mosquitto 但找不到以编程方式为其设置访问控制限制的方法 我正在编写的应用程序需要能够区分用户 并且只允许他们订阅某些主题 当前的解决方案看起
  • com.ibm.msg.client.jms.DetailedJMSException:JMSWMQ0018:无法使用连接模式“yyy”和主机名“zzz”连接到队列管理器“xxx”

    JMS 应用程序需要七个参数才能与此处给出的 MQ 系列成功建立 SSL 连接 https github com ibm messaging mq tls ssl wizard blob master com ibm mq ssl wiza

随机推荐

  • imx6ull_kernel_移植

    1 文件目录结构 2 顶层Makefile理解 3 kernel启动流程 4 kernel移植 心得 跟着左神一步一步操作 目前没有太多的理解 硬件适配中网络驱动和emmc 8线适配讲解的最多 文件移植部分基本就是拷贝和粘贴 Q 1 如果要
  • [837]如何统计OSS上整个Bucket和每个目录大小和文件数

    如题 这个功能相当实用 通过本文讲解的方法 可以方便的看到整个Bucket所占用的空间大小 以及每个目录下所含目录和文件所占用的空间大小 一目了然 1 一般情况下 我们打开OSS文件管理器 可以看到目录和文件 可以看到每个文件的大小 但是无
  • FISCO BCOS网络端口讲解

    本期文章讲的就是网络端口互通这点事 作者从FISCO BCOS的网络端口 FISCO BCOS 2 0的典型网络配置 设计网络安全组的一些策略等角度进行了解析 Part 1 FISCO BCOS 2 0网络的三类端口 FISCO BCOS
  • 第五届阿里天池中间件比赛经历分享-决赛

    消息持久化存储引擎 题目 实现一个进程内消息持久化存储引擎 要求包含以下功能 发送消息功能 根据一定的条件做查询或聚合计算 包括 A 查询一定时间窗口内的消息 B 对一定时间窗口内的消息属性某个字段求平均 以及求和 例子 t表示时间 时间窗
  • 采用信号量机制实现消费者与生产者的线程同步_经典生产者-消费者问题解析...

    1 生产者 消费者问题 生产者和消费者问题在现实系统中是很普遍的 例如在一个多媒体系统中 生产者编码视频帧 而消费者消费 解码 视频帧 缓冲区的目的就是减少视频流的抖动 又如在图形用户接口设计中 生产者检测到鼠标和键盘事件 并将其插入到缓冲
  • 10.MATLAB方差分析

    更多MATLAB数据分析视频请点击 或者在网易云课堂上搜索 MATLAB数据分析与统计 http study 163 com course courseMain htm courseId 1003615016 方差分析是英国统计学家R A
  • 推荐模块丨前端uniapp微信小程序项目

    小兔鲜儿 推荐模块 主要实现 Tabs 交互 多 Tabs 列表分页加载数据 动态获取数据 参考效果 推荐模块的布局结构是相同的 因此我们可以复用相同的页面及交互 只是所展示的数据不同 外链图片转存失败 源站可能有防盗链机制 建议将图片保存
  • 2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

    0 写在最前 2022 10 10 更新yolov5 seg实例分割模型 2022 09 29更新 c 下面使用opencv部署yolov5和yolov7实例分割模型 六 爱晚乏客游的博客 CSDN博客 2022 07 25 更新了下yol
  • [JAVAee]IP数据包的组包与分包

    目录 数据包是什么 数据包的结构 数据包 分组与分组交换 分包是什么 为什么需要分包呢 组包是什么 分包组包过程中和哪些 IP 报头字段有关联 本篇文章主要围绕三个问题来展开 为什么要分包 分包组包过程中和哪些 IP 报头字段有关联 组包时
  • matlab怎么显示当前文件夹和工作区

    参考 matlab怎么显示当前文件夹和工作区 云 社区 腾讯云 1 第一步在我们的电脑上打开matlab 可以看到界面上目前没有显示当前文件夹和工作区 如下图所示 2 第二步我们点击主页右侧的布局 可以看到显示下的当前文件夹和工作区没有勾选
  • 遗传算法入门到掌握(一)

    遗传算法入门到掌握 一 心得 把解决方案做染色体 遗传算法的有趣应用很多 诸如寻路问题 8数码问题 囚犯困境 动作控制 找圆心问题 这是一个国外网友的建议 在一个不规则的多边形 中 寻找一个包含在该多边形内的最大圆圈的圆心 TSP问题 在以
  • node.js HTTP模块 URL模块 supervisor工具

    在vscode 上安装一个插件 Node Snippets 创建一个js文件 直接输入node 就能创建一个服务器 node http server var http require http 表示引入一个HTTP模块 request 表示
  • Texture Format全解析

    Texture Format全解析 Texture Format全解析 What internal representation is used for the texture This is a tradeoff between size
  • sqlmap的安装及使用教程

    1 sqlmap简介 sqlmap 是一个开源渗透测试工具 可自动检测和利用 SQL 注入缺陷并接管数据库服务器 支持多种数据库和多种注入技术 2 sqlmap安装 sqlmap是基于python环境的 因此安装前需要安装python环境
  • Vue + element中table来回切换页面显示差异问题

    这次做项目遇到多个table切换页面显示差异的问题 当我切换到上个页面的时候 表格有一列是下个页面的内容 切换到下个页面的时候那一列的内容消失了 就很奇葩 这个问题也是我都一次遇到 问了Baidu阿姨 上面的解决办法好像都不行 这个时候感觉
  • esxi能直通的显卡型号_虚拟黑群也可以NVMe加速?还能万兆?wa!

    之前我发了三篇关于FreeBSD虚拟机安装黑群晖的文章 没有阅读的同学可以看一下 钱乎 如何拥有一台100T容量的NAS Let s do it zhuanlan zhihu com 钱乎 100TB的NAS之后续填坑 虚拟硬件篇 zhua
  • Gradle sync failed: Sync failed: reason unknown

    android项目复制后打开总是报这个错误 打开build查看红色错误提示 比如提示缺少android 23 打开file gt setting 展开后把对应的SDK勾选上再ok
  • 2021计算机考硕复试线,2021考研复试线汇总:国家线+34所中5所院校复试线①

    原标题 2021考研复试线汇总 国家线 34所中5所院校复试线 突如其来 昨天晚上 中国教育发布 公布了2021年硕士研究生考试学术学位类和专业学位类的国家线 随后 34中的5所院校也更新了2021年复试线成绩 包含以下这5所院校 清华大学
  • vue项目Error: Cannot find module ‘xxx’类报错的解决方法

    现发现只要是报错 Error Cannot find module xxx 例如 Error Cannot find module webpack 这类的问题都可以用下面的方法解决 报错内容如下 运行 npm install 没问题 运行
  • 消息队列的两种模式

    Java消息服务 Java Message Service JMS 应用程序接口是一个Java平台中关于面向消息中间件 MOM 的API 用于在两个应用程序之间 或分布式系统中发送消息 进行异步通信 点对点与发布订阅最初是由JMS定义的 这