RocketMQ消息发送之广播模式

news2024/12/25 9:02:48

前言

在前面的文章中我们回顾了RocketMQ的顺序消息和乱序消息,以及里面包含的乱序消息和全局消息,RocketMQ支持多种消息类型和消费模式

今天这篇文章主要介绍RocketMQ的广播消息。希望文章能为正在学习RocketMQ相关知识的大佬们提供帮助!

在这里插入图片描述

广播模式概述

在RocketMQ中,广播消息是一种特殊的消息消费模式。在广播模式下,每条消息都会被推送到集群内所有注册过的客户端,保证消息至少被每台机器消费一次。与集群模式不同,集群模式下,同一个消费者组内的消息只会被消费一次,而广播模式下,每个消费者都会收到并消费相同的消息。

广播模式特点

  1. 消息重复消费:广播模式下,每条消息都会被推送到所有订阅了Topic的消费者,这意味着消息可能会被重复消费多次。

  2. 不支持顺序消息:广播模式下不支持顺序消息,因为顺序消息需要保证消息的消费顺序,这在广播模式下很难实现的,毕竟所有消费者都会同时收到消息。

  3. 不支持重置消费位点:广播模式下,消费进度在客户端维护,不支持在服务端重置消费位点。如果客户端重启,它将从最新消息开始消费,并不会继续消费之前未处理完的消息。

  4. 消费失败不重试:在广播模式下,如果消息消费失败,RocketMQ不会自动重试。因此,我们很多时候需要自行处理消费失败的情况,比如记录日志、发送告警或这手动重试。

广播模式应用场景

当需要将一条消息通知到多个系统或组件时,可以使用广播消息模式。比如,在某多多或某宝这些电商系统中,订单状态变更需要通知库存系统、物流系统等多个下游系统,这时候就可以使用广播消息。

除此之外,在日志收集系统中,我们可以将日志消息以广播模式发送到多个日志处理组件,每个组件根据自身的职责进行日志处理和分析。

还有,在实时通知推送场景中,比如发送短信、邮件、APP推送等等,我们可以使用广播消息模式将通知消息推送给所有相关的接收者。

手动实现

首先还是使用以往的方式启动搭建的RocketMQ集群。

消息生产者比较简单,代码如下:

        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
        producer.start();
        for (int i = 0; i < 100; i++){
            Message msg = new Message("TopicTest",
                    "TagA",
                    "xiaowei",
                    ("Hello world"+i).getBytes(RemotingHelper.DEFAULT_CHARSET));
            SendResult sendResult = producer.send(msg);
            System.out.printf("%s%n", sendResult);
        }
        producer.shutdown();

在RocketMQ中,实现广播消息模式非常简单。我们可以通过设置消息模型为MessageModel.BROADCASTING来启用广播模式。
接下来是消费者代码,如下(流程在注释中):

// 创建DefaultMQPushConsumer实例 
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("example_group_name");  
// 消费者从队列的开始位置消费消息  
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);  
// 消费者的消息模型为广播模式,消息会被广播给所有消费者  
consumer.setMessageModel(MessageModel.BROADCASTING);  
// 订阅指定的Topic,使用"*"订阅Topic下的所有消息  
consumer.subscribe("TopicTest", "*");  
// 注册消息监听器
consumer.registerMessageListener(new MessageListenerConcurrently() {  
    @Override  
    public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,  
                                                    ConsumeConcurrentlyContext context) {  
        // 遍历消息列表,处理每一条消息  
        for(MessageExt msg:msgs){  
            // 打印消息内容  
            System.out.println("消息内容:"+new String(msg.getBody()));  
        }  
        // 返回消费状态,消息已成功消费  
        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;  
    }  
});  
// 启动消费者实例  
consumer.start();  
// 打印启动成功的提示信息  
System.out.printf("Broadcast Consumer Started.%n");

除此之外,配置生产者和消费者的环境变量:

在这里插入图片描述

为了更方便的看到广播模式的消息影响,这里我们设置消费者允许多实例启动:

在这里插入图片描述
这里可以看到控制台上多个消费者实例都能够收到同样的消息:

在这里插入图片描述

本篇文章到这里就结束了,后续会继续分享RocketMQ相关的知识,感谢各位小伙伴们的支持!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2178162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全自动ai生成视频MoneyPrinterTurbo源码 在线ai生成视频源码

介绍&#xff1a; 现在短视频这么火爆&#xff0c;流量就是金钱。 如果能全自动的生成短视频&#xff0c;是不是很容易带来流量&#xff0c;赚到马内。 MoneyPrinter 这个开源项目就可以自动生成短视频&#xff0c;而且质量还不错&#xff0c;不是那种低质的营销视频。 使用…

画个心,写个花!Python Turtle库带你玩转创意绘图!

文章目录 前言一、Turtle 库基础介绍二、画布设置三、画笔属性设置1.画笔颜色设置2.画笔粗细与速度设置3.画笔形状设置 四、画笔移动函数五、画笔控制函数六、实战案例一&#xff1a;“花”字绘制七、实战案例二&#xff1a;心型图案绘制总结 前言 Python 的 turtle 库是一种简…

【MySQL内置数据库】 mysql

目录 统计 columns_priv component db default_roles engine_cost func general_log global_grants gtid_executed help_category help_keyword help_relation help_topic innodb_index_stats innodb_table_stats ndb_binlog_index password_history plugin…

【RocketMQ】SpringBoot整合RocketMQ

&#x1f3af; 导读&#xff1a;本文档详细介绍了如何在Spring Boot应用中集成Apache RocketMQ&#xff0c;并实现消息生产和消费功能。首先通过创建消息生产者项目&#xff0c;配置POM文件引入RocketMQ依赖&#xff0c;实现同步消息发送&#xff0c;并展示了如何发送普通字符串…

STM32+ADC+扫描模式

1 ADC简介 1 ADC(模拟到数字量的桥梁) 2 DAC(数字量到模拟的桥梁)&#xff0c;例如&#xff1a;PWM&#xff08;只有完全导通和断开的状态&#xff0c;无功率损耗的状态&#xff09; DAC主要用于波形生成&#xff08;信号发生器和音频解码器&#xff09; 3 模拟看门狗自动监…

Ract vs Vue 你更喜欢谁?

React 和 Vue 是当今最受欢迎的两个前端框架&#xff0c;各自有其独特的特点和优势。以下是对这两个框架的详细比较和分析&#xff0c;以帮助你了解它们的异同和适用场景&#xff1a; React 简介 React 是由 Facebook 开发和维护的一个开源 JavaScript 库&#xff0c;主要用于…

OpenAI员工流失的背后:地盘争夺、倦怠、薪酬要求

近日&#xff0c;OpenAI的CTO Mira Murati宣布离职&#xff0c;同一天&#xff0c;首席研究官Bob McGrew、研究副总裁Barret Zoph也宣布离职。 据统计&#xff0c;这已经是2024年第11起OpenAI高管离职事件了。 至今&#xff0c;开启“ChatGPT时刻”的四位OpenAI领袖&#xff…

河南移动:核心营业系统稳定运行超300天,数据库分布式升级实践|OceanBase案例

河南移动&#xff0c;作为电信全业务运营企业&#xff0c;不仅拥有庞大的客户群体和业务规模&#xff0c;还引领着业务产品与服务体系的创新发展。河南移动的原有核心营业系统承载着超过6000万的庞大用户量&#xff0c;管理着超过80TB的海量数据&#xff0c;因此也面临着数据规…

扩散模型(2)--1

1.简介 生成模型通过学习并建模输入数据的分布&#xff0c;从而采集生成新的样木&#xff0c;该模型广泛运用于图片视频生成、文本生成和药物分子生成。扩散模型是一类概率生成模型&#xff0c;扩散模型通过向数据中逐步加入噪声来破坏数据的结构&#xff0c;然后学习一个相对应…

在Windows系统上安装的 Boost C++ 库

步骤一 https://www.boost.org/users/history/version_1_86_0.html 下载Boost库文件: 步骤二 安装: https://www.boost.org/doc/libs/1_52_0/doc/html/bbv2/installation.html 点击运行.\bootstrap.bat脚本在当前目录的powershell中执行:./b2 install --prefixPREFIX 然后…

优选拼团平台架构解析与关键代码逻辑概述

一、系统架构设计 唐古拉优选拼团平台采用多层架构设计&#xff0c;主要包括前端展示层、业务逻辑层、数据访问层及数据存储层。 前端展示层&#xff1a;负责用户界面的展示和交互&#xff0c;包括商品列表、拼团详情、订单管理等页面。前端采用现代前端框架&#xff08;如Vue…

第十四周学习周报

目录 摘要Abstract1. LSTM的代码实现2. 序列到序列模型3. 梯度与方向导数总结 摘要 在上周的学习基础之上&#xff0c;本周学习的内容有LSTM的代码实现&#xff0c;通过对代码的学习进一步加深了对LSTM的理解。为了切入到transformer的学习&#xff0c;本文通过对一些应用例子…

JUC高并发编程4:集合的线程安全

1 内容概要 2 ArrayList集合线程不安全 2.1 ArrayList集合操作Demo 代码演示 /*** list集合线程不安全*/ public class ThreadDemo4 {public static void main(String[] args) {// 创建ArrayList集合List<String> list new ArrayList<>();for (int i 0; i <…

铺铜修改后自动重铺

很多初学者对于敷铜操作感到比较麻烦&#xff1a;为什么每次打过孔&#xff0c;修改走线后都需要手动右击-重新修改敷铜。如何提升layout的效率&#xff1f; 版本&#xff1a;Altium Designer 21.9.2 首先&#xff0c;点击面板右边的小齿轮&#xff0c;进入设置 接下来&#…

9.29学习

1.线上问题rebalance 因集群架构变动导致的消费组内重平衡&#xff0c;如果kafka集内节点较多&#xff0c;比如数百个&#xff0c;那重平衡可能会耗时导致数分钟到数小时&#xff0c;此时kafka基本处于不可用状态&#xff0c;对kafka的TPS影响极大 产生的原因 ①组成员数量发…

【C++并发入门】摄像头帧率计算和多线程相机读取(上):并发基础概念和代码实现

前言 高帧率摄像头往往应用在很多opencv项目中&#xff0c;今天就来通过简单计算摄像头帧率&#xff0c;抛出一个单线程读取摄像头会遇到的问题&#xff0c;同时提出一种解决方案&#xff0c;使用多线程对摄像头进行读取。同时本文介绍了线程入门的基础知识&#xff0c;讲解了…

2-107 基于matlab的hsv空间双边滤波去雾图像增强算法

基于matlab的hsv空间双边滤波去雾图像增强算法&#xff0c;原始图像经过光照增强后&#xff0c;将RGB转成hsv&#xff0c;进行图像增强处理&#xff0c;使图像更加清晰。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a; 2-107 基于matlab的hsv空间双边滤…

“找不到emp.dll,无法继续执行代码”需要怎么解决呢?分享6个解决方法

在日常使用电脑玩游戏的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中最常见的就是“emp.dll丢失”。那么&#xff0c;emp.dll到底是什么&#xff1f;它为什么会丢失&#xff1f;丢失后会对我们的电脑产生什么影响&#xff1f;本文将为您详细解析emp.dll的概念…

超详细的华为ICT大赛报名流程

1、访问华为人才在线官网&#xff0c;点击右上角“登录/注册“&#xff0c;登录华为账号。 报名链接&#xff1a; https://e.huawei.com/cn/talent/cert/#/careerCert?navTypeauthNavKey ▲如已有华为Uniportal账号&#xff0c;完成实名认证后方可报名大赛。 ▲如没有华为…

【有啥问啥】具身智能(Embodied AI):人工智能的新前沿

具身智能&#xff08;Embodied AI&#xff09;&#xff1a;人工智能的新前沿 引言 在人工智能&#xff08;AI&#xff09;的进程中&#xff0c;具身智能&#xff08;Embodied AI&#xff09;正逐渐成为研究与应用的焦点。具身智能不仅关注于机器的计算能力&#xff0c;更强调…