消费端的两种处理机制: 两种机制的区别, 第一种是在消费端出现异常, 系统执行的, 如果多次重试失败, 则可以抛出指定异常拒绝该消息(等同与reject)或者将消息发送到指定队列; 第二种ack机制必须要内部catch住消费者的异常, 手动的进行ack或者nack给rabbitmq , 然后rabbitmq根据配置重新发送消息或者直接舍弃该消息 1. spring.rabbitmq.listener.retry配置的重发是在消费端应用内处理的,不是rabbitqq重发. 因为retry是消费端内部处理的,包括异常也是内部处理,对于rabbitmq是不知道的 2.消息ack a. 返回ack则表明消息被处理, rabbitmq删除消息, b. nack或者reject并且requeue=true则rabbitmq重新发送该消息,requeue=false则讲消息丢弃或放入私信队列 nack和reject区别, 前者可以批量拒绝 消息, reject只能单条消息拒绝 c. 如果rabbitmq发出的消息一直得不到服务端的相应, 则在 rabbitmq断开,连接后会自动重新推送(不管是网络问题还是宕机) 消费端应用重启,消息会自动重新推送 关于retry spring.rabbitmq.listener.simple. retry .max-attempts= 5 最大重试次数