欢迎访问宙启技术站
智能推送

RocketMQ中broker消息存储之如何添加消息

发布时间:2023-05-15 12:54:21

RocketMQ是一个开源的分布式消息中间件,是阿里巴巴集团在其分布式技术上的一次探索,在互联网几乎全部的业务中都有应用。Broker是RocketMQ消息存储的核心,是实现消息持久化的关键。在RocketMQ中添加消息是非常关键的操作,下面我们就来详细了解一下RocketMQ中broker消息存储之如何添加消息。

1. 消息存储模式

RocketMQ支持两种类型的存储模式,分别是同步刷盘模式和异步刷盘模式。在同步刷盘模式下,消息在提交时必须等待消息持久化完成之后才会返回,确保消息不会丢失且不会重复。在异步刷盘模式下,消息提交后会立即返回,但是消息可能在持久化到磁盘之前会因为JVM宕机而丢失,不过通常情况下这种丢失的情况会很少。

2. 创建消息

RocketMQ要添加的每一个消息都是一个Message对象。创建Message对象需要传入4个参数,分别是消息主题(Topic)、消息标签(Tag)、消息键(Keys)和消息体(Body)。其中,消息主题和消息标签用于确定消息类型,这两个参数是必填参数;消息键用于标记消息的 性,是可选参数;消息体则是要发送的消息内容,同样也是必填参数。

3. 消息保存

RocketMQ中默认使用commitlog作为消息存储的载体,所有添加的消息都会追加到commitlog中。持久化过程包括生成消息索引,将消息追加到commitlog,更新内存索引等。当commitlog里的消息达到一定的数量或者一定的时间间隔时,会自动触发消息持久化,即刷盘操作。刷盘操作包括将消息从内存中强制写入磁盘中,并更新内存索引和文件索引,确保文件是可读的,数据不会丢失。

4. 消息同步和异步

RocketMQ中添加消息有处理消息同步和异步两种方式。处理消息同步时,Producer在发送消息后会等待Broker应答,Broker接收到消息后会立即返回应答。处理消息异步时,Producer会在消息发送过程中不等待Broker的应答而进行操作,通常情况下这种方式比同步方式效率更高,但是数据可能会在发送过程中丢失。

总结:

RocketMQ是一个高性能、高可靠、高可扩展性的分布式消息中间件,在使用RocketMQ添加消息时,需要一些技术手段将消息保存到commitlog中,确保消息不会丢失,这是非常关键的一个操作。RocketMQ还提供了同步和异步两种处理消息的方式,需要根据具体业务需求来进行选择。RocketMQ可以广泛应用于不同场景下的消息通信、消息推送、异步处理等,有着极大的应用前景。