为什么要使用消息队列
1. 实现异步
2. 实现解耦
串行任务的并行化
3.流量削峰
高负载任务的负载均衡,高并发流量先放到消息队列中,进行异步处理
4.实现广播
发布/订阅模式,比如下图中,要增加积分系统,只需要积分系统绑定监听即可
RabbitMQ的工作模型
RabbitMQ 交换机类型
1. 直连类型 Direct Exchange
2.主题类型 Topic Exchange
3.广播类型 Fanout Exchange
SpringBoot集成RabbitMQ
1. 配置类:创建交换机,创建队列,创建绑定关系
2. 消费者: 监听队列 @RabbitListener
3. 生产者: AmqpTemplate 或者RabbitTemplate 已经封装好了
4. 服务器信息配置:生产者和消费者都要配置
消息可靠性投递分析
如何确保消息发送到RabbitMQ服务器
1. 使用Rabbit的事务模式,channel.txSelect()等等,类似于数据库事务,不过这种模式是同步阻塞的
2.另外使用confirm的模式,使用异步的方式
如何处理交换机无法路由的消息
1. 可以在channel上绑定监听器,无法找到的时候会有反馈
2. 指定收到无法路由的消息时候,发送到制定的队列