RocketMQ消息发送之广播模式

前言

在前面的文章中我们回顾了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.mfbz.cn/a/885014.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt QVector类

Qt中的QVector是一个模板类&#xff0c;用于存储和操作动态数组。它类似于C标准库中的std::vector&#xff0c;但提供了更多的Qt特有的功能和便利性&#xff0c;更适合在Qt应用中使用。 创建和初始化 // 1&#xff09;默认构造函数&#xff1a;创建一个空的QVector对象。 QV…

笔记整理—linux进程部分(2)使用fork创建进程

为什么要创建进程&#xff0c;首先每个程序的运行都需要一个进程&#xff1b;多进程实现宏观上的并行。 fork的原理&#xff0c;是进程的分裂生长模式。如果操作系统需要一个新的进程&#xff0c;那么就会以cp的方法得到一个新的进程&#xff0c;此时老的进程是父进程&#xff…

指定PDF或图片多个识别区域,识别区域文字,并导出到Excel文件中

常见场景 用户有大量图片/PDF文件&#xff0c;期望能将图片/PDF中的多个区域中的文字批量识别出来&#xff0c;并导入到Excel文件中。期望工具可以批量处理、离线识别&#xff08;保证数据安全性&#xff09;。手工操作麻烦。具体场景&#xff1a;用户有工程现场照片&#xff…

应用层 IV(万维网WWW)【★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、WWW 的概念与组成结构 1. 万维网的概念 万维网 WWW&#xff08;World Wide Web&#xff09;并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息…

本地生活服务项目有哪些:如何利用本地生活市场,打开线下流量!

随着各大互联网公司在本地生活服务板块的布局力度持续加大&#xff0c;越来越多的人都开始意识到了它背后所蕴含着的发展前景和收益潜力&#xff0c;进而纷纷打听起了与之相关的消息。而就小编与多位创业者的交流情况而言&#xff0c;在众多问题中&#xff0c;属本地生活服务项…

探索SpringBoot:学科竞赛管理项目开发

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;任…

基于SpringBoot+Vue的高校实习管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

将Mixamo的模型和动画导入UE5

首先进入Mixamo的官网 , 点击 Character 选择一个模型 (当然你也可以自己上传模型/绑定动画) 然后点击下载 , 这个作为带骨骼的模型 选择FBX格式 , T Pose 直接下载 点击 Animations 选择动画 , 搜索 idle 默认站立动画 点击下载 , 格式选择 FBX , 不带模型只要骨骼 , 帧数选6…

Windows Defender 强力删除工具 Defender Remover 下载

DefenderRemover.exe官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供DefenderRemover.exe最新版正式版官方版绿色版下载,DefenderRemover.exe安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123865.com/s/ajCgTd-79HEDefenderRemo…

[ComfyUI]Flux:超美3D微观山水禅意,经典中文元素AI重现,佛陀楼阁山水画卷

在数字艺术和创意领域&#xff0c;[ComfyUI]Flux以其独特的虚实结合技术&#xff0c;已经成为艺术家和设计师们手中的利器。今天&#xff0c;我们激动地宣布&#xff0c;[ComfyUI]Flux带来了一款超美的3D微观山水禅意作品&#xff0c;经典中文元素通过AI技术重现&#xff0c;包…

项目学习笔记

Downloads – Oracle VirtualBoxhttps://www.virtualbox.org/wiki/Downloads

2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1

目录 1. 在github上搜项目 (以OpenOcc为例&#xff09; 2. 转移到码云Gitee上 3. 进入Linux服务器终端 (jupyter lab) 4. 常用Linux命令 5. 进入对应文件夹中导入项目(代码) 注意&#xff1a;系统盘和数据盘 1. 在github上搜项目 (以OpenOcc为例&#xff09; 把链接复制下…

Python 读取与处理出入库 Excel 数据实战案例(HTML 网页展示)

有如下数据&#xff0c;需要对数据合并处理&#xff0c;输出到数据库。 数据样例&#xff1a;&#x1f447; excel内容&#xff1a; 出入库统计表河北库.xlsx: 出入库统计表天津库.xlsx: 01实现过程 1、创建test.py文件&#xff0c;然后将下面代码复制到里面&#xff0c;最后…

麒麟桌面系统安装和配置Node.js

1.官网下载tar.xz文件 Node.js — 在任何地方运行 JavaScript 2.解压 可以双击直接窗口解压&#xff0c;也可以使用如下命令进行解压&#xff1a; xz -d xxx.tar.xz&#xff1b; tar -xvf xxx.tar 可以解压到usr目录或者其他目录。 3. 配置环境 解压完毕后&#xff0c…

MAC的几个常见的快捷方式

1.mac 查看图片好的方式 默认查看图片的方式无法直接切换上一张下一张 解决方法&#xff1a; 1.&#xff08;最好的方法&#xff09;选中图片直接按空格&#xff0c;进入快速预览图片 2.就是全部选中然后打开&#xff0c;但是说实话有点奇怪&#xff0c;而且很占内存 3.直接显示…

如何修复变砖的手机并恢复丢失的数据

您可能之前听说过“变砖”&#xff0c;但您知道什么是变砖手机吗&#xff1f;正如许多论坛中经常提出的问题一样&#xff0c;我如何知道我的手机是否变砖了&#xff1f;好吧&#xff0c;手机变砖主要有两种类型&#xff0c;即软件变砖和硬变砖。软变砖手机意味着重启后您仍然可…

【springboot】使用thymeleaf模板

1. 导入依赖 首先&#xff0c;创建一个Spring Boot项目&#xff0c;并添加Thymeleaf依赖。在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifa…

『功能项目』3D模型动态UI显示【76】

本章项目成果展示 我们打开上一篇75主角属性值显示的项目&#xff0c; 本章要做的事情是将3D模型动态显示在主角属性展示界面 首先创建RawImage 调整尺寸 创建文件夹&#xff1a;RenderTexture 创建 Render Texture 创建Camera 在场景中放置一个主角预制体删除所有组件 清空标…

Qt --- 其他控件的介绍 --- 多元素控件

一、多元素控件 Qt中提供的多元素控件有&#xff1a; QListWidget、QListView、QTableWidget、QTableView、QTreeWidget、QTreeView。 前两个为列表、中间两个为表格、后两个为树形。 xxWidget vs xxView是啥区别&#xff1f; xxView是更底层的实现&#xff0c;xxWidget是…

Win10系统使用mstsc远程电脑的时候发现隔一段时间就无法使用剪贴板_rdpclip---Windows运维工作笔记055

最近在使用温湿系统的远程桌面功能的时候发现,每当使用一段时间的时候,这个时候远程桌面功能的粘贴板就没办法使用了。 正常情况下,不管我一个电脑远程了多少台电脑,那么这些电脑之间都是可以使用粘贴板的,可以用来从一个电脑中截了图,然后粘贴到另一个电脑中。 但是现…