死信交换机 -> 死信队列
发送消息超过消息队列的长度
消费者拒收消息并且不会把消息返回给消息队列
消息设置超时时间,消息到达时间并且未被消费者消费
2. RabbitMQ如何实现延迟队列?
实现 : TTL + 死信队列
延迟队列:消息进入队列后不会被立即消费,只有到达指定时间后才会被消费
TTL 设置超时时间 + 死信队列 接收死信
3.Rabbitmq 的优势
应用解耦
任务异步式处理
削峰填谷
名词介绍
AMQP --- Advanced Message Queuing protocol 高级消息队列协议
Connection : --> producer 和 broker broker 和 consumer 之间的tcp连接
channel : ---> 如果每一次访问rabbitmq都要建立connection连接,花销会非常巨大 , channel 是connection内部建立的逻辑连接,如果应用程序支持多线程,那么每一个线程都会创建单独的channel 来通讯, AMQP method 包含了 channel id 来帮助客户端和 message broker来识别channel ,所以 channel 之间是互相隔离的 ,channel作为轻量级的connection极大的减少了系统的开销
exchange: 消息到达message broker的第一站 ,然后会匹配查询表的routing key ,然后 把消息分发给queue,常用的类型为 topic (publish - subscribe),direct (point to point ), fanout (multicast)
queue: 消息被传送到这里,等待被消费者取走
binding : exchange 和 queue 之间的虚拟连接 ,binding可以包含routing key,被保存到exchange中的查询表中,用于message的分发
RabbitMQ的6种模式
简单模式、work模式、publish/subscribe发布与订阅模式,routing路由模式,topic主题模式,rpc远程调用模式
topic 模式 : producer 只需要 往 交换机里发送数据
消息的可靠传递confirm 确认模式
return 退回模式
rabbitmq的消息传递路径:
producer -> rabbitmq broker -> exchange -> queue -> consumer
消息从producer 到 exchange 会返回 一个/confirm/iCallback
消息从 exchange -> queue 投递失败会返回一个 returnCallback
利用这两个callback 控制消息的可靠性投递
Consumer Ack
三种确认方式:
1. 自动确认 acknowledge = "none" : 消息一旦被consumer接收到,会自动确认,并把rabbitmq中的消息缓存删除,但是实际业务中可能会出现异常,那么该消息就会丢失
2. 手动确认 acknowledge = "manual" 如果业务出现异常,手动让其重新发送消息
3. 根据异常情况确认 acknowledge = "auto"



