一、为什么要使用消息队列
1. 解耦及异步
使用消息队列可以将同步调用变为异步调用,同时降低系统模块之间的耦合度
2. 削峰
当系统压力过大时,将操作缓存在消息队列中,后面不断读取消息进行操作,达到削峰的目的
3. 复用(可拓展性)
如果系统A要发送消息给多个系统,此时每增加一个子系统,系统A的代码就需要修改,使用消息队列之后,系统A将消息发送到消息队列,其他系统读取消息即可。新增系统时只需到消息队列和宗读取消息即可
二、需要注意事项
1. 注意提高可用性
当MQ服务器宕机时,备用方案。
2. 系统复杂度提高
- 消息重复消费问题
- 消息丢失问题
- 消息传递顺序问题
3. 一致性问题
当多系统处理同一条消息时,同步调用可直接返回失败,使用消息队列的异步调用该如何处理
三、 常见消息中间件对比
ActiveMQ | RabbitMQ | RocketMQ | Kafka | |
---|---|---|---|---|
实现语言 | java | erlang | java | scala |
吞吐量 | 万级 | 万级 | 十万级 | 十万级 |
时效 | ms | 微秒 | ms | ms |
可用性 | 高(主从) | 高(主从) | 非常高(分布式) | 非常高(分布式) |