MQ是什么?
消息队列
MQ的优缺点?
优:
应用解耦 -->降低程序之间的相互依赖
异步提速 --> 异步提速针对的是消息的生产者来说的,对整个整体业务花费的时间其实是增多的
削峰填谷 --> 将峰值平均进行消费
缺:
系统的可用性降低 --> 如果MQ宕机整个系统都无法正常运行了
复杂度提升 --> 因为要学习MQ
一致性降低 --> 使用MQ后,消息存放在MQ中.消费者从MQ中国获取消息进行消费,
那么当消费失败后,就会出现不一致的情况
MQ的实现都有哪些?
ActiveMQ: java
RabbitMQ: erlang
RocketMQ: 阿里的产品
Kafka: 大数据消息中间件
ZeroMQ: 效率最高的MQ,但是实现最复杂
Redis: 也可以实现消息中间件
RabbitMQ的概念?
AMQP协议 类似于http协议,不收语言的限制
RabbitMQ的体系结构?
producer
connection
channel
broker
Exchange
Queue
routingKey
Binding
consumer
RabbitMQ的安装?
RabbitMQ的开发
JAVA的API 、 Spring整合 、SpringBoot整合
RabbitMQ的工作模式
五种消息模式
简单模式
工作队列模式
发布订阅模式
路由模式
通配符模式
RabbitMQ的消息可靠投递
confirms --> 交换机没有正确接收到消息
returns --> 队列没有正确接收到消息
ack --> 消费者眉头正确接收到消息
RabbitMQ的限流
RabbitMQ的TTL
TTL 全称: Time To Live (存活时间/过期时间) 当消息到达存活时间后,还没有被消费,会被自动清除
RabbitMQ的死信队列
死信队列 英文缩写: DLX 当消息成为Dead message 后,可以被重新发送到另一个交换机,这个交换机就是DLX
消息成为死信的三种情况:
1. 队列消息长度达到限制
2.消费者拒绝接受消费信息,并且不把消息重新放入原来的目标队列.
3.员队列消息过期,未被消费.
RabbitMQ的延迟队列
消息进入队列后不会立即被消费,只有达到指定时间后,才会被消费.
注意: 在RabbitMQ中并未提供延迟队列功能。
但是可以使用:TTL+死信队列 组合实现延迟队列的效果。
RabbitMQ的消息补偿
确保所有的消息都要被消费
RabbitMQ的幂等性
同一个消息不管被消费多少次和消费一次的结果必须要一致。
RabbitMQ的日志、消息追踪、集群搭建、haproxy