RocketMQ

102 阅读2分钟

基础知识点

MQ的常见协议

  1. JMS Java Messaging Service ActiveMQ是该协议的典型实现
  2. STOMP Streaming Text Orientated Message Protocol RabbitMQ通过插件可以支持该协议
  3. AMQP Advanced Message Queuing Protocol RabbitMQ是该协议的典型实现
  4. MQTT Message Queuing Telemetry Transport RabbitMQ通过插件可以支持该协议
  5. 但是 Kafka RocketMQ 都不支持这些协议

MQ的主要功能

  1. 异步
  2. 削峰限流
  3. 解耦

image.png

MOM (Message Oriented Middleware) 面向消息的中间件

其他还有 PO(面向过程)OO(面向对象) AO(面向切面)

RocketMQ的基本成员

message

消息:本质上是数据,是生产和消费的最小单位,每个消息必须属于一个主题

producer

一个produer对应多个topic

生产者组,可以有多个生产者,且每个生产者可以生产多个topic

topic

主题:一个topic对应多个不同的consumer组

Queue

队列:一个topic可以有多个Queue,也被称为topic中消息的分区

注意:一个topic中的Queue,只能被一个消费者组中的一个消费者进行消费

tag

标签:topic是消息的一级分类,tag是消息的二级分类

topic=货物

tag=上海

tag=南京

tag=北京

consumer

一个consumer组对应一个topic,但一个consumer组不能消费同一个topic分区

消费者只能消费一种消息

Queue可以实现负载均衡,对于Queue来说是平均的 但是消费者不一定是平均的,比如4个Queue对应3个消费者

分片(与分区不同)

同一个topic在不同服务器上,称为分片

broker (指不同的服务器

多台服务器,对topic进行分片

broker做主从,搭集群

messageId, key

messageId:业务ID

key:

msgId 生产者send()自动生成
offsetMsgId 消息到达broker后,broker端生成

nameServer

  1. nameServer是无状态的
  2. 优点:集群搭建简单
  3. 缺点:broker必须注册到每一个nameServer上,因此并不能随便扩容,若broker不重新配置,新增的nameServer对于broker来说就是不可见的
  4. 路由的剔除:禁止读写权限,运维检测到broker中没有流量后,再把broker从nameServer中剔除
  5. rockermq的路由发现采用的是pull模型,即nameserver不会主动推送给客户端,而是客户端定时拉取,默认每30秒拉取最新的路由
  6. 模型扩展
    • push模型的实时性较好,采用“发布 订阅”模型的方式,但需要与客户端维持长链接,这样会大量占用资
    • pull模型的实时性较差
    • long polling长轮询,是对push和pull模型的整合
  7. 策略 image.png

关系

topic:message 1:n message:topic 1:1 producer:topic 1:n consumer:topic 1:1

broker

image.png

工作流程

image.png

读写队列

image.png

底层原理

业务场景

痛点

与其他MQ对比