- MQ的组成
producer : 发送消息给Broker, 服务器将消息写入磁盘, 并发送确认请求后, 才算消息发送成功
consumer : 定时轮询Broker的消息, 抽取消息, 并返回确认请求
Broker : 接收生产者发送的消息, 消息本地存储; 消费者抽取消息返回确认请求后, 删除该消息
注意点:
生产消息, 消费消息 都是异步的
- 各阶段保证消息可靠
1.发送阶段: 遇到高延迟,Producer会多次重发消息,直到Broker ack确认,过程中Broker会自动去重,超时Producer产生异常,应用进行捕获提示。
2.存储阶段: Broker先刷盘再ack确认,即便ack失败消息不会丢失,多次重试直到Producer接收,会导致消息积压。
3.消费阶段: Broker向Consumer发数据,一段时间未接收,自动重发,直到Consumer Ack确认,Consumer注意幂等处理
不要使用自动ack (自动确认) rabbitMq有此问题