消息队列的两种模式

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--交换机、队列、消息

    交换机 autoDelete 如果设置为true 唯一的一个交换机或者队列解绑 那么该队列将会被自动删除 交换机类型 faout 经过交换机的消息直接转到所有与这个交换器绑定的队列中 无视rounting key的存在 direct 经过交
  • 车祸现场~线上突然宕机,一条订单消息丢失了...

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 写在前面 之前写过一篇文章 RabbitMQ是如何收发消息的 通俗易懂 我们用一个简单易懂的电商场景给大家引入说明了一个消息中间件的使用场景 同时 我们还基于Ra
  • rabbitmq安装

    1 安装 1 1 安装Erlang gt yum install y gcc gcc c glibc devel make ncurses devel openssl devel autoconf java 1 8 0 openjdk de
  • 如何保证消息队列的顺序性?

    面试题 如何保证消息的顺序性 面试官心理分析 其实这个也是用 MQ 的时候必问的话题 第一看看你了不了解顺序这个事儿 第二看看你有没有办法保证消息是有顺序的 这是生产系统中常见的问题 面试题剖析 我举个例子 我们以前做过一个 mysql b
  • Rocket学习原理以及命令【详细】

    运行原理图 NameServer 相当于一个注册中心 把所有信息注册到其中 Broker 存储消息的 Producer 消息生产者 Consumer 消费者 总结 首先启动NameServer 然后启动Borker把ip地址等信息注册到Na
  • MQ相关知识

    http bijian1013 iteye com category 359051 一 操作系统是否有安装该软件 查看版本 dspmqver 一 查看队列管理器运行状态 dspmq 显示结果中QMNAME表示MQ队列管理器的名称 STATU
  • RocketMQ rocketmq_client.log日志文件配置

    1 默认路径 项目添加RocketMQ以后启动项目时会在user home下创建一个rocketmq client log日志文件 文件全路径是 user home logs rocketmqlogs rocketmq client log
  • 【注意】Kafka生产者异步发送消息仍有可能阻塞

    文章目录 问题描述 原因分析 解决办法 总结 问题描述 Kafka是常用的消息中间件 在Spring Boot项目中 使用KafkaTemplate作为生产者发送消息 有时 为了不影响主业务流程 会采用异步发送的方式 如下所示 Slf4j
  • MQ可以用在哪些地方,解决什么问题?

    MQ kafka是以吞吐量高而闻名 不过其数据稳定性一般 而且无法保证消息有序性 阿里巴巴的RocketMQ基于Kafka的原理 利用Java代码打造 弥补了Kafka的缺点 继承了其高吞吐的优势 其客户端目前以Java为主 RabbitM
  • rabbitmq4.0以下版本遇到断网重连异常

    现象描述 一个客户端反应经常性不更新显示信息 分析是rabbitmq的消息没有及时consumer 登陆服务器控制台查看消息状态是ready 终端连接状态running 但就是不消费信息了 分析 怀疑网络中途有中断波动 1 代码里已经设置s
  • 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
  • Docker实战:docker compose 搭建Rocketmq

    1 配置文件准备 1 1 新建目录 home docker data rocketmq conf mkdir home docker data rocketmq conf 1 2 在上面目录下新建文件broker conf文件 内容如下 b
  • 消息队列对比

    目录 什么是消息队列 常用的消息队列工具对比 1 ActiveMQ 2 RabbitMQ 3 Kafka 4 RocketMQ 什么是消息队列 消息队列是分布式应用间交换信息的重要组件 消息队列可驻留在内存或磁盘上 队列可以存储消息直到它们
  • 消息队列的两种模式

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

    面试官在面试候选人时 如果发现候选人的简历中写了在项目中使用了 MQ 技术 如 Kafka RabbitMQ RocketMQ 基本都会抛出一个问题 在使用 MQ 的时候 怎么确保消息 100 不丢失 这个问题在实际工作中很常见 既能考察候
  • RocketMQ-名词和架构

    RocketMQ rocketMQ是做什么的我就不用解释了吧 以及他的背景 本文主要是为了让大家明白RocketMQ的工作原理 架构图 上图 双箭头代表是双向通信 ProducerGroup和ConsumerGroup以及Broker集群
  • rabbitmq重试机制

    1 应答模式 NONE 可以称之为自动回调 即使无响应或者发生异常均会通知队列消费成功 会丢失数据 AUTO 自动检测异常或者超时事件 如果发生则返回noack 消息自动回到队尾 但是这种方式可能出现消息体本身有问题 返回队尾其他队列也不能
  • rabbitmq消费者启动报队列未找到

    使用的是spring rabbitmq 启动tomcate报错 消费这队列找不到 如果队列不存在消费者会自动创建的 Caused by org springframework amqp AmqpIllegalStateException F
  • Java:在后台更新有大量行的 JTable

    我正在编写一个简单的 Java Swing 实用程序 它将从 MQ JMS 服务器读取消息并将它们显示在 JTable 中 private void getMessages try if null Queue Queue close Clo

随机推荐

  • 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定义的 这