RocketMQ学习笔记 一(基础介绍)

95 阅读3分钟

介绍

RocketMQ 作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。

基础概念

  • Producer: 消息生产者,负责产生消息,一般由业务系统负责产生消息

  • Consumer:消息消费者,负责消费消息,一般是后台系统负责异步消费

  • Topic: 是一类消息的集合,是消息的类别(业务分类)一个 topic 可以绑定在多个服务器(Broker)上,生产者发送消息时按照一定策略发送到某一 Broker 上

  • Tag(标签)

    • 一个 tag 属于一个 topic,一个 topic 含有多个 tag

    • 每个消息可以被打上不同的  tag,并且每个消费者可以选择消费特定  tag  的消息,多个消费者也可以同时消费同一个  tag  的消息。一个  tag  并不限定只有一个队列可以消费。

    • 生产者向 tag 中写入数据,消费者从一个 tag 中读取数据

    也可以直接将消息发送到 topic 中,向整个主题发送消息

  • Queue(队列):消息队列,是负载均衡过程中资源分配的基本单元。

  • Group:一类生产者或消费者,这类生产者或消费者通常生产或消费同一类消息,且消息发布或订阅的逻辑一致

    • 生产者组指的是一组生产者应用程序,它们共同向一个主题(topic)发送消息。
    • 消费者组指的是一组消费者应用程序,它们共同从一个主题(topic)接收消息。
    • 消费者组中每个消费者可以分配得到多个 Queue,每个 Queue 只有一个消费者。当一个消费者宕机时,RocketMQ 会从这个消费者组中分配其他消费者,以确保消息被及时处理,实现可伸缩性和容错性。
  • Message:生产者向Topic发送并最终传送给消费者的数据消息的载体。

RocketMQ特性

发送方式

Sync:同步的发送方式,会等待发送结果后才返回

Async:异步的发送方式,发送完后,立刻返回。Client 在拿到 Broker 的响应结果后,会 回调指定的 callback. 该 API 也可以指定 Timeout,不指定时默认为 3000ms.

Oneway:发送后,直接返回。

发送结果

SEND_OK

发送消息成功并不意味着消息的可靠性。为了确保消息不会丢失,建议启用同步Master服务器或同步刷盘选项,即SYNC_MASTER或SYNC_FLUSH。

FLUSH_DISK_TIMEOUT

消息成功发送,但服务器在刷盘时遇到了超时的问题。消息已经被存储在服务器队列(内存)中,只有在服务器宕机时才会丢失。在消息存储配置中,可以设置刷盘方式和同步刷盘的时间长度。如果Broker服务器的刷盘方式为同步刷盘,即FlushDiskType=SYNC_FLUSH(默认为异步刷盘方式),在同步刷盘的时间内(默认为5秒)如果服务器无法完成刷盘,将会返回"刷盘超时"的状态。

FLUSH_SLAVE_TIMEOUT

消息发送成功,但是服务器同步到Slave时超时。此时消息已经进入服务器队列,只有 服务器宕机,消息才会丢失。如果Broker服务器的角色是同步Master,即 SYNC_MASTER(默认是异步Master即ASYNC_MASTER),并且从Broker服务器未在同 步刷盘时间(默认为5秒)内完成与主服务器的同步,则将返回该状态——数据同步到 Slave服务器超时。

SLAVE_NOT_AVAILABLE

消息发送成功,但是此时Slave不可用。如果Broker服务器的角色是同步Master,即 SYNC_MASTER(默认是异步Master服务器即ASYNC_MASTER),但没有配置slave Broker服务器,则将返回该状态——无Slave服务器可用。

总结

最近刚开始接触RocektMQ,只是简单的使用,对功能如何实现还很迷茫 准备在接下来的一段时间进一步学习和理解。