首页 > 其他分享 >RocketMQ的基本概念

RocketMQ的基本概念

时间:2024-09-27 09:50:04浏览次数:9  
标签:事务 RocketM 投递 发送 消息 Q版 基本概念 RocketMQ

  • Producer:消息的发送者;举例:发信者
  • Consumer:消息接收者;举例:收信者
  • Broker:暂存和传输消息;举例:邮局
  • NameServer:管理Broker;举例:各个邮局的管理机构
  • Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topic消息
  • Message Queue:相当于是Topic的分区;用于并行发送和接收消息

rocketmq的消息类型

按照发送的特点分:

1. 同步发送

  1. 同步发送,线程阻塞,投递completes阻塞结束
  2. 如果发送失败,会在默认的超时时间3秒内进行重试,最多重试2次
  3. 投递completes不代表投递成功,要check SendResult.sendStatus来判断是否投递成功
  4. SendResult里面有发送状态的枚举:SendStatus,同步的消息投递有一个状态返回值的

    public enum SendStatus {
        SEND_OK,
        FLUSH_DISK_TIMEOUT,
        FLUSH_SLAVE_TIMEOUT,
        SLAVE_NOT_AVAILABLE,
    }

  5. retry的实现原理:只有ack的SendStatus=SEND_OK才会停止retry

注意事项:发送同步消息且Ack为SEND_OK,只代表该消息成功的写入了MQ当中,并不代表该消息成功的被Consumer消费了

2. 异步发送

  1. 异步调用的话,当前线程一定要等待异步线程回调结束再关闭producer啊,因为是异步的,不会阻塞,提前关闭producer会导致未回调链接就断开了
  2. 异步消息不retry,投递失败回调onException()方法,只有同步消息才会retry,源码参考 DefaultMQProducerImpl.class
  3. 异步发送一般用于链路耗时较长,对 RT 响应时间较为敏感的业务场景,例如用户视频上传后通知启动转码服务,转码完成后通知推送转码结果等。

3. 单向发送

  1. 消息不可靠,性能高,只负责往服务器发送一条消息,不会重试也不关心是否发送成功
  2. 此方式发送消息的过程耗时非常短,一般在微秒级别

下表概括了三者的特点和主要区别。

发送方式发送 TPS发送结果反馈可靠性
同步发送不丢失
异步发送不丢失
单向发送最快可能丢失

按照使用功能特点分:

1. 普通消息(订阅)

普通消息是我们在业务开发中用到的最多的消息类型,生产者需要关注消息发送成功即可,消费者消费到消息即可,不需要保证消息的顺序,所以消息可以大规模并发地发送和消费,吞吐量很高,适合大部分场景。

2. 顺序消息

顺序消息分为分区顺序消息和全局顺序消息,全局顺序消息比较容易理解,也就是哪条消息先进入,哪条消息就会先被消费,符合我们的FIFO,很多时候全局消息的实现代价很大,所以就出现了分区顺序消息。分区顺序消息的概念可以如下图所示:

我们通过对消息的key,进行hash,相同hash的消息会被分配到同一个分区里面,当然如果要做全局顺序消息,我们的分区只需要一个即可,所以全局顺序消息的代价是比较大的。

3. 延时消息 - 订单超时库存归还

延迟的机制是在 服务端实现的,也就是Broker收到了消息,但是经过一段时间以后才发送
服务器按照1-N定义了如下级别: “1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h”;若要发送定时消息,在应用层初始化Message消息对象之后,调用Message.setDelayTimeLevel(int level)方法来设置延迟级别,按照序列取相应的延迟级别,例如level=2,则延迟为5s

msg.setDelayTimeLevel(2);
 SendResult sendResult = producer.send(msg);

实现原理:

  1. 发送消息的时候如果消息设置了DelayTimeLevel,那么该消息会被丢到ScheduleMessageService.SCHEDULE_TOPIC这个Topic里面
  2. 根据DelayTimeLevel选择对应的queue
  3. 再把真实的topic和queue信息封装起来,set到msg里面
  4. 然后每个SCHEDULE_TOPIC_XXXX的每个DelayTimeLevelQueue,有定时任务去刷新,是否有待投递的消息
  5. 每 10s 定时持久化发送进度

4. 事务消息

消息队列RocketMQ版的事务消息有什么特点_云消息队列 RocketMQ 版(RocketMQ)-阿里云帮助中心

消息队列RocketMQ版提供的分布式事务消息适用于所有对数据最终一致性有强需求的场景。本文介绍消息队列RocketMQ版事务消息的概念、优势、典型场景、交互流程以及使用过程中的注意事项。

概念介绍

  • 事务消息:消息队列RocketMQ版提供类似X或Open XA的分布式事务功能,通过消息队列RocketMQ版事务消息能达到分布式事务的最终一致。
  • 半事务消息:暂不能投递的消息,发送方已经成功地将消息发送到了消息队列RocketMQ版服务端,但是服务端未收到生产者对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半事务消息。
  • 消息回查:由于网络闪断、生产者应用重启等原因,导致某条事务消息的二次确认丢失,消息队列RocketMQ版服务端通过扫描发现某条消息长期处于“半事务消息”时,需要主动向消息生产者询问该消息的最终状态(Commit或是Rollback),该询问过程即消息回查。

分布式事务消息的优势

消息队列RocketMQ版分布式事务消息不仅可以实现应用之间的解耦,又能保证数据的最终一致性。同时,传统的大事务可以被拆分为小事务,不仅能提升效率,还不会因为某一个关联应用的不可用导致整体回滚,从而最大限度保证核心系统的可用性。在极端情况下,如果关联的某一个应用始终无法处理成功,也只需对当前应用进行补偿或数据订正处理,而无需对整体业务进行回滚。

go操作rocketmq开发环境搭建

发送普通消息

发送普通消息

消费消息

消费者

发送延时消息

延迟消息

发送事务消息

发送事务消息

标签:事务,RocketM,投递,发送,消息,Q版,基本概念,RocketMQ
From: https://blog.csdn.net/2401_82463559/article/details/142585049

相关文章

  • RocketMq知识总结及消息顺序性
    为什么选择RocketMq?几种MQ的区别:如果业务场景对并发量要求不是太高(十万级、百万级),那这四种消息队列中,RabbitMQ一定是你的首选。如果是大数据领域的实时计算、日志采集等场景,用Kafka是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规......
  • Linux系统基本概念与文件系统组成
    基本概念Linux是一种广受欢迎的开源操作系统,具有高度的灵活性、稳定性和安全性。以下是Linux的一些基本概念:一、起源与发展起源:Linux最初由芬兰计算机科学家林纳斯·托瓦兹(LinusTorvalds)在1991年首次发布。它是基于当时的Minix操作系统,开发出的一个免费的类Unix操作系统......
  • 搭建RocketMQ集群
    一、环境及准备集群环境:软件版本:部署前操作:关闭防火墙,关闭selinux(生产环境按需关闭或打开)同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器[root@es1~]#crontab-l#为了方便直接使用公网服务器#updatetime*/5****/usr/bin/rdate-stime-b.nist.gov&>/dev/nul......
  • RocketMQ多master多salve集群搭建
    一、RocketMQ集群模式简介单Master方式风险比较大,一旦Broker重启或者宕机,将导致整个环境不可用,不建议线上使用.多Master模式一个集群中没有slave,全是master,例如2个master或者3个master.优点:配置简单,性能最好,单个Master宕机或重启对应用无影响,磁盘配置为RAID10时,......
  • Elasticsearch基本概念及底层 【总结】
    随着业务的增长,数据与日俱增,这时为用户带来丰富的、便捷的搜索功能就迫在眉睫了。传统的数据库在处理文本搜索、模糊查询、海量数据统计分析的时候总会力不从心,所以在处理这些复杂的搜索需求时,我们更倾向于使用Elasticsearch搜索引擎。Elasticsearch是一个分布式、RESTf......
  • 通信的基本概念以及串口和定时器使用
    一.数据传送的方式  串行通讯  速度慢,占用资源少,距离远  并行通讯  速度快,占用资源多二.通信方式  单工通讯    一个固定发送,一个固定接受  半双工通讯    对讲机  全双工通讯    电话三.数据同步方式  同步(有时钟......
  • 介绍pytorch的基本概念及应用场景
    PyTorch的基本概念PyTorch是一个基于Python的开源机器学习(深度学习)框架,由Facebook的人工智能研究院(FAIR)开发。它以其出色的灵活性和易用性在深度学习领域广受欢迎。PyTorch的基本概念主要包括以下几个方面:张量(Tensor):张量是PyTorch最基本的数据结构,类似于多维数组,用于存储......
  • Cache(高速缓冲存储器)的基本概念和原理
    目录一、Cache基本概述1.Cache :2.局部性原理二、Cache性能分析:一、Cache基本概述CPU的读取指令速度很快,主存的速度很慢,如果快速的CPU每一次都从主存读取数据,会被主存拖累,降低执行效率。Cache:解决主存和CPU速度不匹配问题 1.Cache :   Cache会将CPU经常访问......
  • 2025秋招NLP算法面试真题(二十)-有监督微调基本概念
    1.基本概念1.微调方法是啥?如何微调?微调(Fine-tuning)是一种迁移学习的方法,用于在一个预训练模型的基础上,通过在特定任务的数据上进行有监督训练,来适应该任务的要求并提高模型性能。微调利用了预训练模型在大规模通用数据上学习到的语言知识和表示能力,将其迁移到特定任务上。......
  • RocketMQ 基本概念
    RocketMQ的由来随着使⽤中队列和虚拟主题的增加,阿⾥巴巴团队使⽤的ActiveMQIO模块达到了瓶颈。为了尽⼒通过节流、断路器或降级来解决这个问题,但效果不佳。所以开始关注当时流⾏的消息传递解决⽅案Kafka。不幸的是,Kafka⽆法满⾜要求(在这么多消息队列中间,kafka......