Skip to content

Commit

Permalink
RocketMQ 消息幂等
Browse files Browse the repository at this point in the history
  • Loading branch information
tangchen.tangchen committed Feb 1, 2020
1 parent df7d38e commit 02c63ea
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions markdown/第7章 RocketMQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -1331,6 1331,18 @@ RocketMQ 支持两种消息模式:集群消费(Clustering)和广播消费



### 消息幂等性

在所有消息系统中消费消息有三种模式,at-most-once最多一次,at-least-once最少一次和exactly-once精确仅一次,分布式消息系统都是在三者间取平衡,前两者是可行的并且被广泛使用。

- at-most-once:消息投递后不论消费是否成功,不会再重复投递,有可能会导致消息未被消费,RocketMQ未使用该方式。
- at-least-once:消息投递后,消费完成后,向服务器返回ack,没有消费则一定不会ack消息。由于网络异常、客户端重启等原因,服务器未能收到客户端返回的ack,服务器则会再次投递,这就会导致可能重复消费,RocketMQ通过消费确认机制(ACK)来确保消息至少被消费一次。
- exactly-once:必须要两个条件都满足情况下,才能认为消息是“Exactly Only Once”:发送消息阶段,不允许发送重复的消息;消费消息阶段,不允许消费重复的消息。在分布式系统环境下,如果要实现该模式,不可避免要产生巨大的开销。RocketMQ为了追求高性能,并不保证此特性,无法避免消息重复,由业务上进行幂等性处理。

如果业务对消费重复非常敏感,必须要在业务层面进行去重处理,具体实现可以通过分布式锁来完成。



### 并发消费与顺序消费

我们在业务代码中要实现一个Consumer,需要注册一个监听器Listener,用于在收到消息时进行业务逻辑处理。监听有2种模式:并发消费、顺序消费。 默认是并发消费,使用`@RocketMQMessageListener`可以设置consumeMode参数修改。
Expand Down Expand Up @@ -1367,6 1379,24 @@ RocketMQ 支持两种消息模式:集群消费(Clustering)和广播消费



##5. 运维

### 集群部署

https://rocketmq-1.gitbook.io/rocketmq-connector/quick-start/qian-qi-zhun-bei/rocketmq-ji-qun-da-jian#duo-master-duo-slave-mo-shi-tong-bu-shuang-xie

####单Master

#### 多Master

#### 多Master多Slave模式-异步复制

#### 多Master多Slave模式-同步复制








Expand Down

0 comments on commit 02c63ea

Please sign in to comment.