基本介绍

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. Py编程方法,尾递归优化,map函数,filter函数,reduce函数

    函数式编程 1.面向过程 把大的问题分解成流程,按照流程来编写过程 2.面向函数 面向函数编程=编程语言定义的函数+数学意义上的函数先弄出数学意义上的方程式,再用编程方法编写这个数学方程式注意面向函数 ...

  2. vue3.0 composition API

    一.Setup函数 1.创建时间:组件创建之前被调用,优先与created被调用,this指向的实例为window,created所指向的实例为proxy 2.this指向:不会指向组件实例 3.参数 ...

  3. centos7制作U盘启动盘-九五小庞

    一.准备相关软件 1.8G以上U盘 2.UltraISO虚拟光驱(试用版即可)最新版 下载地址:https://cn.ultraiso.net/xiazai.html  点击下载试用 3.CentOS ...

  4. 计算机网络安全 —— C# 使用谷歌身份验证器(Google Authenticator)(五)

    一.Google Authenticator 基本概念  Google Authenticator是谷歌推出的一款动态口令工具,旨在解决大家Google账户遭到恶意攻击的问题,在手机端生成动态口令后, ...

  5. Enabling Session Persistence 粘性会话

    NGINX Docs | HTTP Load Balancing https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-ba ...

  6. 配置《Orange's一个操作系统的实现》环境心得

    <Orange>这本书开篇第一章就做了一个实例,编写了一段引导扇区的代码,但是引导介质仍然采用了已被淘汰多年的软盘.在经历了两天的痛苦查找后终于找到了最方便的解决办法,在此做一下记录,希望 ...

  7. 济南学习D3T1__线性筛和阶乘质因数分解

    [问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...

  8. 802.1X

    1.简介 IEEE802 LAN/WAN委员会为解决无线局域网网络安全问题,提出了802.1X协议.后来,802.1X协议作为局域网端口的一个普通接入控制机制在以太网中被广泛应用,主要解决以太网内认证 ...

  9. Cisco的互联网络操作系统IOS和安全设备管理器SDM__散知识点1

    1.启动路由器:当你初次启动一台Cisco路由器时,它将运行开机自检(POST)过程.如果通过了,它将从闪存中查找Cisco IOS,如果有IOS文件存在,则执行装载操作(闪存是一个可电子擦写.可编程 ...

  10. MySQL安全审计(init_connect)

    1.常规安全 在说审计之前我们先提一点一般我们常用的MySQL的安全注意事项. 指定完善的MySQL安全流程 用户授权邮件备注 每个人对应权限均需留底 所有用户非管理员及特殊账户,均精细化授权 2.s ...