RocketMQ入门到入土(一)新手也能看懂的原理和实战!(中)

简介: RocketMQ入门到入土(一)新手也能看懂的原理和实战!(中)

三、测试


rocketmq给我们提供了测试工具和测试类,可以在安装完很方便的进行测试。


0、准备工作


rocketmq给我们提供的默认测试工具在bin目录下,叫tools.sh。我们测试前需要配置这个脚本,为他指定namesrv地址才可以,否则测试发送/消费消息的时候会出现如下错误 connect to null failed


22:49:02.470 [main] DEBUG i.n.u.i.l.InternalLoggerFactory - Using SLF4J as the default logging framework
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
java.lang.IllegalStateException: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to null failed


配置如下:


vim tools.sh
# 在export JAVA_HOME上面添加如下这段代码
export NAMESRV_ADDR=localhost:9876


1、发送消息


./tools.sh org.apache.rocketmq.example.quickstart.Producer


成功的话会看到哗哗哗的日志,因为这个类会发送1000条消息到TopicTest这个Topic下。


2、消费消息


./tools.sh org.apache.rocketmq.example.quickstart.Consumer


成功的话会看到哗哗哗的日志,因为这个类会消费TopicTest下的全部消息。刚发送的1000条都会被消费掉。


3、控制台


发送成功后我们自然也能来到管控台去看消息和消费情况等等等信息


image.png


四、架构图以及角色


1、架构图


image.png


2、角色


2.1、Broker


  • 理解成RocketMQ本身
  • broker主要用于producer和consumer接收和发送消息
  • broker会定时向nameserver提交自己的信息
  • 是消息中间件的消息存储、转发服务器
  • 每个Broker节点,在启动时,都会遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,之后定时上报


2.2、Nameserver


  • 理解成zookeeper的效果,只是他没用zk,而是自己写了个nameserver来替代zk
  • 底层由netty实现,提供了路由管理、服务注册、服务发现的功能,是一个无状态节点
  • nameserver是服务发现者,集群中各个角色(producer、broker、consumer等)都需要定时向nameserver上报自己的状态,以便互相发现彼此,超时不上报的话,nameserver会把它从列表中剔除
  • nameserver可以部署多个,当多个nameserver存在的时候,其他角色同时向他们上报信息,以保证高可用,
  • NameServer集群间互不通信,没有主备的概念
  • nameserver内存式存储,nameserver中的broker、topic等信息默认不会持久化,所以他是无状态节点


2.3、Producer


  • 消息的生产者
  • 随机选择其中一个NameServer节点建立长连接,获得Topic路由信息(包括topic下的queue,这些queue分布在哪些broker上等等)
  • 接下来向提供topic服务的master建立长连接(因为rocketmq只有master才能写消息),且定时向master发送心跳


2.4、Consumer


  • 消息的消费者
  • 通过NameServer集群获得Topic的路由信息,连接到对应的Broker上消费消息
  • 由于Master和Slave都可以读取消息,因此Consumer会与Master和Slave都建立连接进行消费消息


3、核心流程


  • Broker都注册到Nameserver上
  • Producer发消息的时候会从Nameserver上获取发消息的topic信息
  • Producer向提供服务的所有master建立长连接,且定时向master发送心跳
  • Consumer通过NameServer集群获得Topic的路由信息
  • Consumer会与所有的Master和所有的Slave都建立连接进行监听新消息


五、核心概念


1、Message


消息载体。Message发送或者消费的时候必须指定Topic。Message有一个可选的Tag项用于过滤消息,还可以添加额外的键值对。


2、topic


消息的逻辑分类,发消息之前必须要指定一个topic才能发,就是将这条消息发送到这个topic上。消费消息的时候指定这个topic进行消费。就是逻辑分类。


3、queue


1个Topic会被分为N个Queue,数量是可配置的。message本身其实是存储到queue上的,消费者消费的也是queue上的消息。多说一嘴,比如1个topic4个queue,有5个Consumer都在消费这个topic,那么会有一个consumer浪费掉了,因为负载均衡策略,每个consumer消费1个queue,5>4,溢出1个,这个会不工作。


4、Tag


Tag 是 Topic 的进一步细分,顾名思义,标签。每个发送的时候消息都能打tag,消费的时候可以根据tag进行过滤,选择性消费。


5、Message Model


消息模型:集群(Clustering)和广播(Broadcasting)


6、Message Order


消息顺序:顺序(Orderly)和并发(Concurrently)


7、Producer Group


消息生产者组



8、Consumer Group


消息消费者组


六、ACK


首先要明确一点:ACK机制是发生在Consumer端的,不是在Producer端的。也就是说Consumer消费完消息后要进行ACK确认,如果未确认则代表是消费失败,这时候Broker会进行重试策略(仅集群模式会重试)。ACK的意思就是:Consumer说:ok,我消费成功了。这条消息给我标记成已消费吧。


七、消费模式


1、集群模式(Clustering)


1.1、图解


image.png





相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1天前
|
消息中间件 存储 安全
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
33 0
|
1天前
|
消息中间件 Docker 微服务
RabbitMQ入门指南(十一):延迟消息-延迟消息插件
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了DelayExchange插件、延迟消息插件实现延迟消息等内容。
57 0
|
1天前
|
消息中间件 微服务
RabbitMQ入门指南(十):延迟消息-死信交换机
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了死信交换机、死信交换机实现延迟消息等内容。
49 0
|
1天前
|
消息中间件 供应链 Java
RabbitMQ入门指南(九):消费者可靠性
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了消费者确认机制、失败重试机制、失败处理策略、业务幂等性等内容。
43 0
RabbitMQ入门指南(九):消费者可靠性
|
1天前
|
消息中间件 存储 Java
RabbitMQ入门指南(八):MQ可靠性
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了MQ数据持久化、LazyQueue模式、管理控制台配置Lazy模式、代码配置Lazy模式、更新已有队列为lazy模式等内容。
65 0
|
1天前
|
消息中间件 JSON Java
RabbitMQ入门指南(六):消息转换器及其案例
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了RabbitMQ默认转换器、JSON转换器及其案例等内容。
40 0
|
1天前
|
消息中间件 Java API
RabbitMQ入门指南(五):Java声明队列、交换机以及绑定
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了Java声明队列、交换机以及绑定队列和交换机等内容。
36 0
|
1天前
|
消息中间件 微服务
RabbitMQ入门指南(四):交换机与案例解析
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了交换机在RabbitMQ中的作用与类型、交换机案例(Fanout交换机、Direct交换机、Topic交换机)等内容。
48 0
|
1天前
|
消息中间件 Java API
RabbitMQ入门指南(三):Java入门示例
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了AMQP、Spring AMQP和使用SpringAMQP实现对RabbitMQ的消息收发等内容。
33 0
RabbitMQ入门指南(三):Java入门示例
|
1天前
|
消息中间件 存储 数据库
RabbitMQ入门指南(二):架构和管理控制台的使用
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了RabbitMQ架构和管理控制台的使用等内容。
59 0
RabbitMQ入门指南(二):架构和管理控制台的使用