基本介绍

rocketmq是阿里巴巴团队使用java语言开发的一款基于发布订阅模型的分布式消息队列中间件,是一款低延迟,高可用,拥有海量消息堆积能力和灵活拓展性的消息队列。

特点

  • 可以实现集群无单点故障问题,节点高可用,水平可扩展;
  • 支持消息存储,写入低延迟,支持实时消息查询;
  • 支持上万个消息队列,性能高;
  • 提供消息失败重试机制,可靠性高;
  • 开源社区活跃性高,经受过阿里双十一考验,具备较高成熟度。

基本组件

下图是rocketmq的物理部署架构:

从上图可以知道,rocketmq由四大核心模块组成:producer、consumer、brokerServer、nameServer。其中brokerServer和nameServer是rocketmq的服务端,两者一起独立的对外提供服务;而producer和consumer可看做是rocketmq的客户端,一般依附于业务应用程序。下面对这四个组件进行分别介绍:

  • NameSever

    NameServer,一般称为名称服务器,是rocketmq中一个非常重要的组件,主要提供轻量级服务发现和路由功能,功能说明如下:

    1.broker管理:NameServer负责接收Broker集群各个节点的注册信息,并定时提供心跳来检测集群中的Broker是否可用;

    2.路由管理:NameServer 还负责保存和维护broker集群的路由元信息,broker的每次上下线都和nameServer通信,由nameServer来维护broker的路由信息,而producer和consumer通过访问nameServer获得对应broker的访问地址后,再向对应的broker发起请求。nameServer解除了broker和客户端的耦合依赖关系,大大提高了效率。
  • BrokerServer

    BrokerServer主要负责rocketmq中消息的接收,存储和转发,支持消息的push和pull模式,提供了极高的峰值处理能力和按照时间顺序存储数以百万记的消息存储能力,此外,它提供了灾难恢复、丰富的度量统计和警报机制,因此成为rocketmq中最核心的组件。
  • Producer

    Producer,顾名思义就是生产者,在Rocketmq中主要用来产生并发送消息,生产端可以使用producer来发送多种形式的消息到brokerServer, 然后由brokerServer统一进行分发。rocketmq的producer支持多种形式的消息发送,如同步消息发送、异步回调消息发送、顺序消息发送以及单向消息发送(异步无回调)。除了单向消息发送,其余的发送方式均需要brokerServer返回发送结果的确认消息。另外,相比其他MQ中间件,rocketmq的一个重要功能是支持发发送事务消息(半消息),该机制能一定程度上解决分布式事务的问题。
  • Consumer

      Consumer是消费者组件,负责消费producer发送的消息,它会从brokerServer获取消息并发送给应用程序,应用程序可以根据需要进行消费。Consumer支持两种消费模式,一种是推模式,这种模式下消息是由brokerServer主动推送给Consumer的,而拉模式则是Consumer定期去brokerServer拉取消息。

      rocketmq使用的消费原语是At least Once, 即至少一次消费成功。如果一定时间内没有接收到consumer消息确认消费的响应结果,会将同一条消息再次投递给consumer。rocketmq采用ack机制保证消息的消费成功,所以consumer可能会多次收到同一条消息,需要consumer的业务方做好幂等防护。

基本概念

除了上述说明的基本组件,rocketmq中还有一些基本概念需要进行说明,掌握这些概念之后用户可以更好地理解rocketmq的设计理念。

  • Topic

    Topic即主题,在rocketmq中代表一系列消息的集合,属于一级消息类型,通常用于对消息进行初步分类。任何消息只能属于一个topic主题,主题是rocketmq进行消息发布订阅的最小单位。业务方可以通过创建并订阅各式各样的主题来满足自身的业务要求。不同主题之间的消息在逻辑上没有关联。
  • Tag

    Tag即标签,从属于Topic,用于在同一主题内部对消息进行进一步区分,标签可以简单的认为是二级主题,通过tag标签功能,业务方可以方便的实现对各种二级主题的消费需求,从而实现对消息的精确分类和消费。
  • group

    group,顾名思义就是组的意思,在rocketmq中代表着同一类客户端的集合。具体可分为消费者组(consumer group)和生产者组(producer group)两种。消费者组和生产者组之间没有任何关联(即使组名一样)。

    1.消费者组:

    消费者组代表着同一类型的消费者集群。同一消费者组内的消费者通常消费同样的消息且消息消费逻辑一致。消费者组的概念使得consumer集群在消费消息时,rocketmq可以通过负载均衡来做到消费消息时的高可用和容错。

    2.生产者组:

    类似地,生产者组代表同一类型的生产者集合,在rocketmq中生产者组可以实现事务消息的高可用性。
  • message

    message是rocketmq中消息传递的主体,每一条消息具有全局唯一的message ID, 用户可以根据message ID查询进行消息的精确查询。另外,message的内容可以是不超过rocketmq限制的任意二进制数据,rocketmq不会对消息承载的数据内容做任何干预。
  • 集群模式

    集群模式:对于任意一条被订阅的消息,同一消费者组下的节点只有一个节点对其进行消费;一个消费者组中的全部节点分摊所有消息。

    消费示例图如下所示:

  • 广播模式

    广播模式:对于任意一条被订阅的消息,同一消费者组下的所有节点都会对其进行消费;一个消费者组中的全部节点都能接收到全量的消息。

    消费示例图如下所示:

参考资料

https://www.cnblogs.com/ldy-blogs/p/10452422.html

https://blog.csdn.net/qq_37939251/article/details/84026365

https://www.cnblogs.com/xiaoxiongcanguan/p/11510366.html

【rocketmq学习笔记】rocketmq入门学习的更多相关文章

  1. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  2. WebSocket学习笔记——无痛入门

    WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报  分类: 物联网学习笔记(37)  版权声明:本文为博主原 ...

  3. Java学习笔记之---入门

    Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...

  4. DBFlow框架的学习笔记之入门

    什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...

  5. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  6. HTML+CSS学习笔记 (6) - 开始学习CSS

    HTML+CSS学习笔记 (6) - 开始学习CSS 认识CSS样式 CSS全称为"层叠样式表 (Cascading Style Sheets)",它主要是用于定义HTML内容在浏 ...

  7. 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧

    目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...

  8. 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用

    目录 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用 24.1 expect实现无交互登录 24.1.1 安装和使用expect 24.2 正则表达式的使用 24 ...

  9. 学习笔记:CentOS7学习之二十三: 跳出循环-shift参数左移-函数的使用

    目录 学习笔记:CentOS7学习之二十三: 跳出循环-shift参数左移-函数的使用 23.1 跳出循环 23.1.1 break和continue 23.2 Shift参数左移指令 23.3 函数 ...

  10. 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环

    目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...

随机推荐

  1. get uuid

    https://wx2.qq.com/?&lang=zh_CN /** * 启动二维码登录 */ function doQrcodeLogin() { loginFactory.getUUID ...

  2. DPDK CAS(compare and set)操作

    前言 rte_ring是一个无锁队列,无锁队列的出队入队操作是rte_ring实现的关键.因此,本文主要讲解dpdk是怎样使用无锁机制实现rte_ring的多生产者入队操作. rte_atomic32 ...

  3. (数据科学学习手札105)Python+Dash快速web应用开发——回调交互篇(中)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  4. C# 给Word不同页面设置不同背景

    给Word文档设置背景时,通常只能针对整篇文档设置统一的背景,如果需要对某些页面单独设置背景,则需要通过另外的方式来实现.本文通过C# 程序代码演示如何来实现.并附VB.NET代码作参考. 思路:通过 ...

  5. Java面试,面试题

    Java面试,面试题 HashMap,HashTable,ConcurrentHash的共同点和区别 HashMap HashTable ConcurrentHashMap ArrayList和Lin ...

  6. Docker中运行nginx

    Docker中运行nginx 1.Docker中运行nginx 2.配置文件 2.1 nginx.conf 2.2 default.conf 3.docker的镜像可以挂什么卷 部分内容原文地址: C ...

  7. linux c驴杂记

    C语言标准库中包含了各种用于处理错误的函数和宏.1.assert( ) 宏 #include<assert.h>void assert( int expression );可用于诊断程序b ...

  8. linux最初配置( vimrc设置 、tab键设置 inputrc、中文输入法等等)

    1..vimrc设置   syntax on set tabstop=4 set softtabstop=4 set autoindent set cindent set nu set ruler & ...

  9. Spring集成swagger步骤(包含Header)

    1.添加依赖,2.4.0: <dependency> <groupId>io.springfox</groupId> <artifactId>sprin ...

  10. 通过f5的默认路由使服务器上网

    1.通过f5的默认路由使服务器上网 1)将服务器的默认网关指到f5的floating ip 2)f5上配置