返回

深入解析 RocketMQ 消息发送模式:同步、异步与 OneWay

后端

RocketMQ 消息发送机制:同步、异步与 OneWay

RocketMQ 作为一款分布式消息中间件,为开发者提供了三种消息发送模式:同步发送、异步发送和 OneWay 发送。本文将深入解析这三种模式的运作机制、特性以及适用场景。

同步发送

同步发送模式顾名思义,是指在发送消息后,生产者会阻塞等待 broker 的响应。一旦 broker 成功接收并持久化消息,生产者才会继续执行后续操作。

流程:

  1. 生产者构造消息对象并指定主题和消息体。
  2. 生产者将消息发送至 broker。
  3. broker 接收到消息后,进行持久化操作并向生产者发送确认消息。
  4. 生产者收到确认消息后,解锁并继续执行。

特性:

  • 可靠性高: 消息发送成功后,生产者会收到 broker 的确认,确保消息已成功持久化。
  • 实时性低: 由于需要等待 broker 确认,同步发送模式的吞吐量较低。

适用场景:

同步发送模式适用于对可靠性要求较高的场景,例如重要通知或交易消息。

异步发送

异步发送模式与同步发送模式类似,但生产者在发送消息后不会阻塞等待 broker 的响应。生产者将消息发送至 broker 后,便立即继续执行后续操作。

流程:

  1. 生产者构造消息对象并指定主题和消息体。
  2. 生产者将消息发送至 broker。
  3. broker 接收到消息后,进行持久化操作。
  4. 生产者继续执行,而不会等待 broker 的确认。

特性:

  • 吞吐量高: 由于生产者不会阻塞等待 broker 确认,异步发送模式的吞吐量较高。
  • 可靠性低: 生产者在发送消息后,不会收到 broker 的确认,因此无法确保消息是否成功持久化。

适用场景:

异步发送模式适用于对吞吐量要求较高、但对可靠性要求不高的场景,例如日志记录或消息队列。

OneWay 发送

OneWay 发送模式与异步发送模式类似,但生产者甚至不会等待 broker 收到消息。生产者在将消息发送至 broker 后,立即继续执行后续操作。

流程:

  1. 生产者构造消息对象并指定主题和消息体。
  2. 生产者将消息发送至 broker,但不等待 broker 的响应。
  3. 生产者继续执行。

特性:

  • 吞吐量极高: 由于生产者不等待任何响应,OneWay 发送模式的吞吐量最高。
  • 可靠性最低: 生产者无法确保消息是否成功发送至 broker,更无法确保消息是否成功持久化。

适用场景:

OneWay 发送模式适用于对吞吐量要求极高、且对可靠性要求极低的场景,例如监控数据采集或心跳检测。

重试机制

为了保证消息发送的可靠性,RocketMQ 提供了重试机制。当消息发送失败时,RocketMQ 会自动重试发送该消息。

重试策略:

  • 初始重试次数: 重试次数由生产者在发送消息时指定,默认为 2。
  • 重试间隔: 两次重试之间的间隔时间由生产者指定,默认为 100ms。
  • 最大重试次数: 重试次数超过最大重试次数后,生产者将停止重试,并向用户抛出异常。

注意事项:

  • 重试次数不宜设置过高,否则会影响消息发送的吞吐量。
  • 重试间隔不宜设置过短,否则会增加 broker 的负载。

总结

RocketMQ 提供了同步发送、异步发送和 OneWay 发送三种消息发送模式,每种模式都有其自身的特性和适用场景。开发者可以根据业务需求选择合适的发送模式。此外,RocketMQ 提供的重试机制也为消息发送的可靠性提供了保障。