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

MQ的消费模式-消息是推还是拉

文章目录

    • 概述
    • RocketMQ默认push
    • RabbitMQ默认push
    • Kafka默认拉Pull
    • ActiveMQ默认push

概述

MQ的消费模式可以大致分为两种,一种是推Push,一种是拉Pull
Push是服务端主动推送消息给客户端,Pull是客户端需要主动到服务端轮询获取数据。
推优点是及时性较好,但如果客户端没有做好流控,一旦服务端推送大量消息到客户端时,就会导致客户端消息堆积甚至崩溃。
拉优点是客户端可以依据自己的消费能力进行消费,但是频繁拉取会给服务端造成压力,并且可能会导致消息消费不及时。

在消息队列系统中,Kafka、RabbitMQ、ActiveMQ和RocketMQ都支持推模式(Push)和拉模式(Pull)两种消息消费方式。但是它们在默认行为和主要特点上有所不同:

  1. Kafka:
    ○ 默认行为:Kafka 使用拉模式(Pull)作为默认的消息消费方式。消费者需要主动从 Kafka Broker 拉取消息。
    ○ 主要特点:Kafka 提供高吞吐量、持久性、分布式、可扩展的消息传递。消费者可以自主控制消息的消费进度。
  2. RabbitMQ:
    ○ 默认行为:RabbitMQ 使用推模式(Push)作为默认的消息消费方式。Broker 主动推送消息给消费者。
    ○ 主要特点:RabbitMQ 提供灵活的消息路由和多种交换机类型,支持广泛的消息协议。它更适合用于实时性要求较高的场景。
  3. ActiveMQ:
    ○ 默认行为:ActiveMQ 支持推模式(Push)和拉模式(Pull),具体取决于消费者的配置。通过消息监听器实现推模式,通过 JMS API 实现拉模式。
    ○ 主要特点:ActiveMQ 是一个功能丰富的开源消息中间件,支持广泛的消息协议和高级特性,如事务性消息和消息持久化。
  4. RocketMQ:
    ○ 默认行为:RocketMQ 使用推模式(Push)作为默认的消息消费方式。Broker 主动推送消息给消费者。
    ○ 主要特点:RocketMQ 是一个高吞吐量、低延迟、高可靠性和可伸缩性的分布式消息队列系统。它在支持海量消息堆积和数据复制方面表现出色。

需要注意的是,以上消息队列系统都可以通过配置或编程来切换消费模式,以满足具体的业务需求。选择合适的消息消费方式取决于应用程序的实时性要求、处理能力以及对消息传输的可控性需求。

RocketMQ默认push

RocketMQ 支持两种消费消息的方式:推模式(Push)和拉模式(Pull)。

  1. 推模式(Push):
    在推模式下,消费者向 Broker 注册监听器,当有消息到达时,Broker 主动推送消息给消费者。消费者只需要注册消息监听器,并在监听器中处理接收到的消息即可。
  2. 拉模式(Pull):
    在拉模式下,消费者需要主动向 Broker 发起请求,从指定的队列中拉取消息。消费者需要定时轮询 Broker,获取待消费的消息并进行处理。消费者可以控制拉取消息的频率和数量。
    在 RocketMQ 中,消费者默认使用推模式来消费消息。但是也可以通过设置消费者的消费模式为 Pull 来切换到拉模式。
    RocketMQ的push模式其实底层的实现还是基于pull实现的,我们介绍过长轮询,其实RocketMQ的push就是通过长轮询来实现的。
    总的来说,RocketMQ 的消息消费既支持推模式又支持拉模式,可以根据实际需求选择合适的消费方式。

RabbitMQ默认push

在 RabbitMQ 中,消息消费是基于推模式(Push)实现的。当消费者注册了队列,并设置了消息监听器时,RabbitMQ 会主动推送消息给消费者进行处理。消费者不需要主动轮询或拉取消息,而是由 RabbitMQ 主动将消息推送给已注册的消费者。
这种推模式使得 RabbitMQ 在消息传递方面表现出色,能够及时地将消息传递给消费者。消费者只需关注消息到达时的处理逻辑,而不必担心消息的拉取和管理问题。
总的来说,在 RabbitMQ 中,消息是通过推模式推送给消费者的,消费者只需要注册消息监听器,当有消息到达时就会触发监听器对消息进行处理。

Kafka默认拉Pull

在 Kafka 中,消息消费是基于拉模式(Pull)实现的。消费者需要主动向 Kafka Broker 发起拉取消息的请求,并从指定的主题(topic)中获取消息。消费者可以控制拉取消息的频率、数量以及处理逻辑。
Kafka 的拉取模式使得消费者可以根据自身的处理能力和需求来控制消息的消费速率,可以按照自己的节奏进行消息处理,避免了推送模式下可能出现的消息堆积和处理不及时的情况。
总的来说,在 Kafka 中,消息是通过拉取模式由消费者主动从 Broker 拉取的,消费者可以根据需要自主控制消息的拉取和处理过程。

ActiveMQ默认push

在 ActiveMQ 中,消息消费通常是基于推模式(Push)实现的,类似于 RabbitMQ。当消费者注册了消息监听器并订阅了某个队列或主题时,ActiveMQ 会主动将消息推送给消费者进行处理。消费者无需主动拉取消息,而是等待 ActiveMQ 主动通知并传递消息。

通过消息监听器实现的推模式消费,在 ActiveMQ 中是比较常见和典型的方式。消费者只需关注消息到达时的处理逻辑,而不需要关心消息的拉取和管理细节,简化了消息消费的编程模型。

总的来说,在 ActiveMQ 中,消息消费是通过推模式实现的,消费者注册监听器后,ActiveMQ 主动将消息推送给消费者,消费者只需处理接收到的消息即可。

相关文章:

MQ的消费模式-消息是推还是拉

文章目录 概述RocketMQ默认pushRabbitMQ默认pushKafka默认拉PullActiveMQ默认push 概述 MQ的消费模式可以大致分为两种,一种是推Push,一种是拉Pull Push是服务端主动推送消息给客户端,Pull是客户端需要主动到服务端轮询获取数据。 推优点是及…...

一个平台满足你对测试工具的所有需求

背景 目前,测试人员普遍使用的测试工具有Postman、JMeter等,但这些工具都存在一定的局限性。例如,Postman缺少对API性能测试方面的支持,而JMeter则缺乏一个整合测试报告、测试脚本的统一管理系统以及UI测试功能。 RunnerGo是什么…...

【C语言】【字符串函数】【超详解】【上】!!!

前言: 在学习C语言的过程中,字符串、字符数组等对新手来说总是会有疏忽,在已有的库函数中,我们平时用到最多的就是关于字符串的函数,今天我们就来详细学习字符串函数的相关内容。 下面我们就开始讲解字符串函数&#x…...

算法沉淀——动态规划之其它背包问题与卡特兰数(leetcode真题剖析)

算法沉淀——动态规划之其它背包问题与卡特兰数 二维费用的背包问题01.一和零02.盈利计划 似包非包组合总和 Ⅳ 卡特兰数不同的二叉搜索树 二维费用的背包问题 01.一和零 题目链接:https://leetcode.cn/problems/ones-and-zeroes/ 给你一个二进制字符串数组 strs…...

selenium中ChromeDriver配置,一把过,并且教你伪装

最近正值毕业季,我之前不是写了个问卷星代码嘛,昨晚上有人凌晨1点加我,问我相关内容。 由于我之前C盘重装了一下,导致我很多东西空有其表,实际不能用,借此机会,向大家编写ChromeDriver配置&…...

vue3 + vite 项目可以使用纯Js开发吗?

答案:可以 创建项目: 按照链接参考或者按官方: webstorm 创建vue3 vite 项目-CSDN博客 项目目录 tsconfig.json 配置允许js allowJs指定是否编译js文件,在任意文件当中,如果我们模块使用js写的,那么我们需要 将all…...

Java EE之线程安全问题

一.啥是线程安全问题 有些代码,在单个线程执行时完全正确,但同样的代码让多个线程同时执行,就会出现bug。例如以下代码: 给定一个变量count,让线程t1 t2分别自增5000次,然后进行打印,按理说co…...

掌握Nodejs高级图片压缩技巧提升web优化

掌握Nodejs高级图片压缩技巧提升web优化 在当今的数字时代,图像在网络开发中发挥着至关重要的作用。它们增强视觉吸引力、传达信息并吸引用户。然而,高质量的图像通常有一个显着的缺点——较大的文件大小会减慢网页加载时间。为了应对这一挑战并确保快速加载网站,掌握 Node…...

C++初阶 类(上)

目录 1. 什么是类 2. 如何定义出一个类 3. 类的访问限定符 4. 类的作用域 5. 类的实例化 6. 类的大小 7. this指针 1.this指针的引出 2. this指针的特性 8. 面试题 1. 什么是类 在C语言中,不同类型的数据集合体是结构体。为了方便管理结构体,我…...

图片速览 BitNet: 1-bit LLM

输入数据 模型使用absmax 量化方法进行b比特量化,将输入量化到 [ − Q b , Q b ] ( Q b 2 b − 1 ) \left[-Q_{b},Q_{b}\right](Q_{b}2^{b-1}) [−Qb​,Qb​](Qb​2b−1) x ~ Q u a n t ( x ) C l i p ( x Q b γ , − Q b ϵ , Q b − ϵ ) , Clip ⁡ ( x , a , b ) ma…...

金融基础——拨备前利润和拨备后利润介绍

一、简介 拨备前利润(PreProvision Operating Profit,也就是PPOP)和拨备后利润的主要区别在于是否扣除减值准备金、是否遵循保守性原则以及显示的利润数值不同。 拨备前利润。指在计算利润时没有扣除减值准备金的利润,它等于税前…...

网络编程作业day7

作业项目&#xff1a;基于UDP的聊天室 服务器代码&#xff1a; #include <myhead.h>//定义客户信息结构体 typedef struct magtye {char type; //消息类型char name[100]; //客户姓名char text[1024]; //客户发送聊天信息 }msg_t;//定义结构体存储…...

【Vision Pro杀手级应用】3D音乐会/演唱会,非VR视频播放的形式,而是实实在在的明星“全息”形象,在你的面前表演

核心内容形式:体积视频 参考对标案例深度解读: 体积视频,这一全新的内容形式,正在引领我们进入一个前所未有的四维体验时代。它将传统的演艺形式推向了新的高度,让我们能够更加深入地沉浸在虚拟世界中,感受前所未有的视听盛宴。 在这一领域,有一个引人注目的案例,那…...

变频器学习

西门子变频器 SINAMICS V20 入门级变频器 SINAMICS G120C...

Linux Ubuntu系统安装MySQL并实现公网连接本地数据库【内网穿透】

文章目录 前言1 .安装Docker2. 使用Docker拉取MySQL镜像3. 创建并启动MySQL容器4. 本地连接测试4.1 安装MySQL图形化界面工具4.2 使用MySQL Workbench连接测试 5. 公网远程访问本地MySQL5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主…...

0048__Unix传奇

Unix传奇 &#xff08;上篇&#xff09;_unix传奇(上篇)-CSDN博客 Unix传奇 &#xff08;下篇&#xff09;-CSDN博客 Unix现状与未来——CSDN对我的采访_nuix邮件系统行业地位-CSDN博客...

蓝桥杯-排序

数组排序 Arrays.sort(int[] a) 这种形式是对一个数组的所有元素进行排序&#xff0c;并且时按从小到大的顺序。 package Work;import java.util.*;public class Imcomplete {public static void main(String args[]) {int arr[]new int [] {1,324,4,5,7,2};Arrays.sort(arr)…...

计算机设计大赛 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …...

高性能JSON框架之FastJson的简单使用

高性能JSON框架之FastJson的简单使用、 1.前言 1.1.FastJson的介绍: JSON协议使用方便&#xff0c;越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架,Github地址: FastJson 1.2.FastJson的特点: 1.F…...

★判断素数的几种方法(由易到难,由慢到快)

素数的定义&#xff1a; 素数&#xff0c;又称为质数&#xff0c;指的是“大于1的整数中&#xff0c;只能被1和这个数本身整除的数”。换句话说&#xff0c;素数是只有两个正约数&#xff08;1和本身&#xff09;的自然数。素数在数论中有着重要的地位&#xff0c;且素数的个数…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...