返回
深入解析 RocketMQ 消息发送模式:同步、异步与 OneWay
后端
2023-11-25 03:22:04
RocketMQ 消息发送机制:同步、异步与 OneWay
RocketMQ 作为一款分布式消息中间件,为开发者提供了三种消息发送模式:同步发送、异步发送和 OneWay 发送。本文将深入解析这三种模式的运作机制、特性以及适用场景。
同步发送
同步发送模式顾名思义,是指在发送消息后,生产者会阻塞等待 broker 的响应。一旦 broker 成功接收并持久化消息,生产者才会继续执行后续操作。
流程:
- 生产者构造消息对象并指定主题和消息体。
- 生产者将消息发送至 broker。
- broker 接收到消息后,进行持久化操作并向生产者发送确认消息。
- 生产者收到确认消息后,解锁并继续执行。
特性:
- 可靠性高: 消息发送成功后,生产者会收到 broker 的确认,确保消息已成功持久化。
- 实时性低: 由于需要等待 broker 确认,同步发送模式的吞吐量较低。
适用场景:
同步发送模式适用于对可靠性要求较高的场景,例如重要通知或交易消息。
异步发送
异步发送模式与同步发送模式类似,但生产者在发送消息后不会阻塞等待 broker 的响应。生产者将消息发送至 broker 后,便立即继续执行后续操作。
流程:
- 生产者构造消息对象并指定主题和消息体。
- 生产者将消息发送至 broker。
- broker 接收到消息后,进行持久化操作。
- 生产者继续执行,而不会等待 broker 的确认。
特性:
- 吞吐量高: 由于生产者不会阻塞等待 broker 确认,异步发送模式的吞吐量较高。
- 可靠性低: 生产者在发送消息后,不会收到 broker 的确认,因此无法确保消息是否成功持久化。
适用场景:
异步发送模式适用于对吞吐量要求较高、但对可靠性要求不高的场景,例如日志记录或消息队列。
OneWay 发送
OneWay 发送模式与异步发送模式类似,但生产者甚至不会等待 broker 收到消息。生产者在将消息发送至 broker 后,立即继续执行后续操作。
流程:
- 生产者构造消息对象并指定主题和消息体。
- 生产者将消息发送至 broker,但不等待 broker 的响应。
- 生产者继续执行。
特性:
- 吞吐量极高: 由于生产者不等待任何响应,OneWay 发送模式的吞吐量最高。
- 可靠性最低: 生产者无法确保消息是否成功发送至 broker,更无法确保消息是否成功持久化。
适用场景:
OneWay 发送模式适用于对吞吐量要求极高、且对可靠性要求极低的场景,例如监控数据采集或心跳检测。
重试机制
为了保证消息发送的可靠性,RocketMQ 提供了重试机制。当消息发送失败时,RocketMQ 会自动重试发送该消息。
重试策略:
- 初始重试次数: 重试次数由生产者在发送消息时指定,默认为 2。
- 重试间隔: 两次重试之间的间隔时间由生产者指定,默认为 100ms。
- 最大重试次数: 重试次数超过最大重试次数后,生产者将停止重试,并向用户抛出异常。
注意事项:
- 重试次数不宜设置过高,否则会影响消息发送的吞吐量。
- 重试间隔不宜设置过短,否则会增加 broker 的负载。
总结
RocketMQ 提供了同步发送、异步发送和 OneWay 发送三种消息发送模式,每种模式都有其自身的特性和适用场景。开发者可以根据业务需求选择合适的发送模式。此外,RocketMQ 提供的重试机制也为消息发送的可靠性提供了保障。