消费端限流TTL死信队列延迟队列消息可靠性投递Consumer ACK
消费端限流
这种模式中消费端的确认模式一定为手动确认。acknowledge=“manual”
英文缩写:DLX。当消息成为Deadmessage后,可以被重新发送到另一个交换机,这个交换机就是DLX。
消息成为死信的三种情况:
1.队列消息长度到达限制
2.消费者拒接消费消息,basicNack/basicReject,并且不把消息重新放入原目标队列,requeue=false;
3.原队列存放在消息过期设置,消息到达超时时间未被消费
RabbitMQ为我们提供了两种方式用来控制消息的投递可靠性模式
Confirm 确认模式 消息从producer到exchange 通过ConnectionFactory的publisher-confirms=true开启。使用rabbitTemplate.set/confirm/iCallback设置回调函数。当消息发送到exchange后回调/confirm/i方法。在方法中判断ack,如果为true,则发送成功,如果为false,则发送失败,需要处理。
return 退回模式 消息从exchange到queue投递失败 设置ConnectionFactory的publisher-returns=true 开启。当消息从exchange路由到queue失败后,如果设置了rabbitTemplate。setMandatory(true)参数,则会将消息退回给producer。并执行回调函数returnedMessage.
RabbitMQ整个消息投递的路径为:
producer—>rabbitmq broker --> exchange -->queue–>consumer
表示消费端收到消息后的确认方式
三种:
自动确认:acknowledge=“none” 指:当消息一旦被consumer接收到,则自动确认收到,并将相应message从RabbitMQ的消息缓存中移除。但是在实际业务处理中,很有可能消息接收到,业务处理出现异常,那么消息就好丢失。
手动确认:acknowledge=“manual”。手动确认方式,则需要在业务处理成功后,调用channel.basicAck(),手动签收,如果出现异常,这调用channel》basicNack()方法,让其自动重新发送消息。如果消费端没有出现异常,则调用channel.basicAck(deliveryTag,false);方法确认签收消息。如果出现异常,则在catch中调用basicNack或basicReject,拒绝消息,让MQ重新发送消息.
根据异常情况确认:acknowledge=“auto”



