介绍

RocketMQ是一款成熟的分布式消息中间件。
由阿里2012年开源,2017年成为Apache顶级项目。
源码是java写的。
高性能,低延迟,高可靠。历经多次双十一大促,整体很稳定。

RocketMQ对比其他mq的优势

对比kafka和Rabbitmq,RocketMQ优势如下:
1.支持事务型消息。
2.可以支持指定时间的延迟消费,但不能指定任意时间,RocketMQ有18个延迟级别。
3.支持消费失败的重试。
4.consumer可以tag过滤,tag可以理解为比topic更一个细粒度的子主题。
5.支持重复消费,这个kafka也支持。

RocketMQ需要注意

Rocket不能完全保证消息的消费是有且只有一次,只能保证至少一次。
所以在设计消费端的时候,要特别注意幂等性。或者你的系统允许少量的消息重复。

RocketMQ核心四大组件

NameService,Broker,Producer,Consumer
每个组件可以部署成集群模式水平扩展。

1、Producer负责发消息,有3种发送方式

1.同步发送:重要场景,发一条要等接收方反馈成功,才会继续发。
2.异步发送:对响应时间有要求的场景,发一条后不等反馈,直接再发。
3.单向发送:量大但可靠性要求不高的场景,如日志收集。
同步发送就像打电话,你说一句,听到对面反馈了,再说。
异步发送就像发微信,你只管一直发,对面看到后也会反馈。
单向发送就像写信,写出去就不管了

2、Consumer负责消费消息,有2种消费方式

1.拉取型消费(DefaultMQPushConsumer):主动拉消息
2.推送型消费(DefaultMQPullConsumer):先去注册消费监听器,监听器被触发才会消费

3、Broker负责存储消息

接收Producer发的消息,存储,Consumer从这里拉取消息。
Broker有两个角色,Master和Slave。了解分布式协议的,对这两个主从角色肯定不陌生。
Broker集群部署有4种方式:
1.单Master,即只有一个主
一旦宕机,服务不可用,单机测试用,生产不会用
2.多Master,即都是主
单个Master宕机,服务还是可用的,但宕机期间该机器的消息不能被实时消费了
3.多Master多Slaver(同步双写)
每个Master都配一个Slaver,写消息的时候,主从都写成功才算成功。
这个是解决了上一个主宕机后消息不能被实时消费的问题,但由于得写两份,性能略受影响
4.多Master多Slaver(异步复制)
每个Master都配一个Slaver,写消息的时候,主成功就成功返回,之后异步复制消息到从。
主从消息延迟是毫秒级。
这个是解决了上一个写两份的性能问题,但在主宕机且不可恢复的情况下,可能会由于消息延迟复制的原因,导致少量消息丢失。

这四种方式,每一种都是为了解决上一种的问题所作出的改进,但同时又会带来新的问题。
但慢慢的,可以将问题降到一个可人为控制并且可接受的范围内。
所以,在不考虑成本的情况下,第四种是最优的,但往往企业都会将成本放在比较高的位置,所以鱼与熊掌不可兼得。

4、NameServer负责保存Broker相关元信息并给生产者和消费者查找Broker信息

每个Broker启动的时候都会在NameServer注册,生产者在发送消息前也会根据Topic到这里获取Broker的路由信息。消费者也会定时获取topic的路由信息。
完全可以将NameServer理解成一个注册中心,因为早期没有NameServer的时候,这个位置是用Zookeeper代替的。

5、ProducerGroup & ConsumerGroup

ProducerGroup可以理解为一个发消息的应用,一个Producer Group下包含多个Producer实例。
ConsumerGroup可以理解为一个拿消息应用,一个Consumer Group下包含多个Consumer实例。
Producer实例或者Consumer实例,可以是多态机器,也可以是一台机器的多个进程,也可以是一个进程的多个对象。
一个Producer Group可以发送多个Topic消息。
一个Consumer Group下的多个Consumer以均摊方式消费消息,如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。

RocketMQ的消息Message

topic:

一条消息必须要有一个主题topic,这个和大部分消息中间件一样。

tag:

此外Message还有一个标签的概念,可以理解为子主题,可用可不用。
同一个topic下,当消息还有更细粒度的区分时,就可以通过tag标签来标记。

RocketMQ的消费模式

集群消费

默认是集群消费。
一个消费者集群共同消费一个主题。

广播消费

消息会发给消费组中的每一个消费者消费。

批量消费

consumer.setConsumeMessageBatchMaxSize(10);

消息队列(5):RocketMQ相关推荐

  1. rocketmq广播消息为什么不能重试_几分钟带你看懂“消息队列和RocketMQ”的入门总结

    消息队列扫盲 消息队列顾名思义就是存放消息的队列,队列我就不解释了,别告诉我你连队列都不知道似啥吧? 所以问题并不是消息队列是什么,而是 消息队列为什么会出现?消息队列能用来干什么?用它来干这些事会带 ...

  2. java B2B2C springmvc mybatis电子商务平台源码-消息队列之RocketMQ

    RocketMQ出自阿里公司的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好.RocketMQ在阿里集团被广泛应用在订单,交易, ...

  3. Spring Cloud —— 消息队列与 RocketMQ

    导航 一.什么是 MQ 二.常见的 MQ 产品 三.RocketMQ 概念与架构设计 3.1 基本概念 1.消息模型(Message Model) 2.生产者与消费者(Producer & C ...

  4. 服务器消息不是按顺序来的,消息队列之 RocketMQ(示例代码)

    简介 RocketMQ 特点 RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目.作为经历 ...

  5. 分布式消息队列之RocketMQ

    一 RocketMQ概述 1.1 MQ概述 1.1.1 MQ简介 MQ,Message Queue,是一种提供 消息队列服务 的中间件,也称为消息中间件,是一套提供了消息生产.存储.消费全过程API的 ...

  6. 【消息队列】RocketMQ 基础知识扫盲

    一.前言 消息队列顾名思义就是存放消息的队列,所以问题并不是消息队列是什么,而是: 消息队列为什么会出现? 消息队列能用来干什么? 用它来干这些事会带来什么好处? 消息队列会带来副作用吗? 下面分别解 ...

  7. [分布式学习]消息队列之rocketmq笔记

    文档地址 RocketMQ架构 哔哩哔哩上的视频 mq有很多,近期买了<分布式消息中间件实践>这本书,学习关于mq的相关知识.mq大致有有4个功能: 异步处理.比如业务端需要给用户发送邮件 ...

  8. Spring Cloud Alibaba 消息队列:基于 RocketMQ 实现服务异步通信

    本讲咱们将学习以下三方面内容: 介绍消息队列与 Alibaba RocketMQ: 掌握 RocketMQ 的部署方式: 讲解微服务接入 RocketMQ 的开发技巧: 首先咱们先来认识什么是消息队列 ...

  9. 阿里云消息队列 RocketMQ、Kafka 荣获金融级产品稳定性测评 “先进级” 认证

    近日,由中国信通院和混沌工程实验室联合举办的混沌工程技术沙龙–金融行业精品专场顺利召开,并发布金融级产品稳定性测评成果.在分布式系统稳定性评估体系获奖名单中,阿里云分布式消息队列服务成为通过首批消息队 ...

  10. Spring Boot 消息队列 RocketMQ 入门

    转载自  芋道 Spring Boot 消息队列 RocketMQ 入门 摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/RocketMQ/ 「芋道源码」欢迎转载 ...

最新文章

  1. 2019.2.20异常
  2. 111. Leetcode 300. 最长递增子序列 (动态规划-子序列问题)
  3. 声学漫谈之三:听觉的分辨力
  4. spring的AOP配置之XML方式
  5. Sharepoint java sdk_java – 使用JAX-WS将文件保存到Sharepoint服务器
  6. 由CloudStack项目引起的ESXI嵌套虚拟化引起的二级虚拟机无法被访问
  7. codeforces 361 D. Levko and Array(dp+二分)
  8. 关于js弹出框的介绍:
  9. Android内核开发:如何统计系统的启动时间
  10. 读书笔记 摘自:《斯坦福极简经济学》
  11. App内测神器之蒲公英
  12. 树莓派配置USB声卡
  13. 【牛客网】最小公倍数
  14. 关于JDK lambda表达式与匿名内部类的等价实现却出现了截然不同的结果原因分析
  15. Cisco Cpos STM 配置示例
  16. 深层学习:心智如何超越经验1.1 混乱的时钟
  17. rabbitmq基础1——消息中间件概念、Rabbitmq的发展起源和基本组件的作用流程
  18. 只有在vc 中才能使用mfc吗?什么是MFC?
  19. oracle 内部表连接方式,oracle表连接方式
  20. 计算组合数公式nCr的实现方法和源代码

热门文章

  1. 二叉树介绍与代码实现
  2. python 词云小demo
  3. linux -- control service and daemon process
  4. Oracle IMPDP
  5. mysql数据库中的校对集
  6. 表单和iframe的使用
  7. C#语言之“中英文混合字符串对齐”的方法
  8. DEDE无简略标题时显示完整标题
  9. [唐胡璐]Excel技巧 - 使用Excel 2007完成多人协同录入工作
  10. 设计模式1——设计模式的原则