RabitMQ(消息中间件):
一、使用方法:
1、引入依赖:
2、添加配置:
3、在服务者端注入RabbitTemplate实现消息发送:
4、消费者端添加配置:
5、bean一个Queue对象,交给IOC容器管理:
6、消费者端创建监听类RabbitListener,并交给spring管理:
二、使用MQ的优缺点:
优点:1、异步;2、解耦;3、削峰。(吞吐量提升、故障隔离)
缺点:1、系统可用性降低;2、系统复杂度提高;3、一致性问题。
三、Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别?
追求可用性:Kafka、 RocketMQ 、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力:RocketMQ、Kafka
追求消息低延迟:RabbitMQ、Kafka
四、MQ的基本结构:
RabbitMQ中的一些角色:
- broker:消息队列服务器实体
- publisher:生产者 发布者
- consumer:消费者 订阅者
- exchange个:交换机,负责消息路由,转发消息给队列,注:如果找不到队列,则消息会丢失
- queue:消息队列载体,存储消息
- virtualHost:虚拟主机,隔离不同用户|环境的exchange、queue、消息的隔离
- Routing Key: 路由关键字,exchange根据这个关键字进行消息投递
- Binding Key:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
五、RabbitMQ的消息模型:
1、普通消息队列;
2、工作消息队列;
3、广播消息队列;
4、路由消息队列;
5、主题消息队列。
六、使用RabbitMQ的场景:
1、服务间异步通信;2、顺序消费;3、定时任务;4、请求削峰。
七、如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
1、发送方确认模式:将信道设置成confirm模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的ID。
2、接收方确认机制:消费者接收每一条消息后都必须进行确认。
八、如何避免消息重复投递或重复消费?
1、在消息生产时,MQ内部针对每条生产者发送的消息生成一个inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列;
2、在消息消费时,要求消息体中必须要有一个 bizId(对于同一业务全局唯一,如支付ID、订单ID、帖子ID 等)作为去重的依据,避免同一条消息被重复消费。
九、如何保证消息的可靠传输:
希望对大家有帮助,有用的大家可以关注点个赞~~~
版权归原作者 _积累沉淀、蜕变成长 所有, 如有侵权,请联系我们删除。