目录
主要作用:
- 解耦
- 多个系统调用主系统可选择是否订阅
- 异步
- 主系统可提高响应时间
- 削峰
- 通过消息队列减轻消息访问对服务器的压力
四种消息中间件:
ActiveMQ
- 万级吞吐量
RabbitMQ(中小型公司)
- 万级吞吐量
RocketMQ(中大型公司)(非分布式)
-
十万级
-
Topic主题分类更加细致 有Tag分级
-
高可用:镜像集群模式
-
怎么做:开启镜像集群策略,可指定同步数据节点数量是所有还是个别几个
Kafka(纯分布式的mq)
-
十万级
-
高可用:假设一个topic有三个partition,在topic中写三条消息,每条消息存在不同的partition中,每个partition有自己的副本,选出leader和follower,leader宕机后,在follower中选出leader
-
只能leader读写,保证一致性,减轻复杂度
-
leader读取数据后,follower从leader拉取数据,响应ack告诉leader
-
生产者给kafka发送消息都有一个offset 在kafka中是有序的,消费者也是按照顺序消费的,消费者按顺序消费到哪个offset,zookeeper有记录,kafka可以从zookeeper中读取消费到那个位置了
-
由于消费者重启,kafka无法感知消费者消标记的offset,kafka会重复发已经发过的消息,导致消费者会重复消费 需要要保证幂等性
解决办法:
每条消息设置id存入Redis
数据库主键唯一性