# RabbitMQ高级 **Repository Path**: itzhoucong/rabbitmq_advanced ## Basic Information - **Project Name**: RabbitMQ高级 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RabbitMQ高级 #### 介绍 **1.1** **消息的可靠投递** 1、confirm 确认模式 2、return 退回模式 rabbitmq 整个消息投递的路径为: producer--->rabbitmq broker--->exchange--->queue--->consumer 消息从 producer 到 exchange 则会返回一个 confirmCallback 。 消息从 exchange-->queue 投递失败则会返回一个 returnCallback 。 **1.2** **Consumer ACK** ack指Acknowledge,确认。 表示消费端收到消息后的确认方式。 有三种确认方式: 自动确认:acknowledge="none" 手动确认:acknowledge="manual" 根据异常情况确认:acknowledge="auto" 其中自动确认是指,当消息一旦被Consumer接收到,则自动确认收到,并将相应 message 从 RabbitMQ 的消息缓存中移除。 但是在实际业务处理中,很可能消息接收到,业务处理出现异常,那么该消息就会丢失。 如果设置了手动确认方式,则需要在业务处理成功后,调用channel.basicAck(),手动签收, 如果出现异常,则调用channel.basicNack()或 basicReject()方法,让其自动重新发送消息。 **消息的可靠投递总结:** 1.持久化 exchange要持久化 queue要持久化 message要持久化 2.生产方确认Confirm 3.消费方确认Ack 4.Broker高可用 **1.3** **消费端限流** 在 中配置 prefetch属性设置消费端一次拉取多少消息 消费端的确认模式一定为手动确认。acknowledge="manual" **1.4** **TTL** 设置队列过期时间使用参数:x-message-ttl,单位:ms(毫秒),会对整个队列消息统一过期。 设置消息过期时间使用参数:expiration。单位:ms(毫秒),当该消息在队列头部时(消费时),会单独判断这一消息是否过期。 如果两者都进行了设置,以时间短的为准。 **1.5** **死信队列** 消息成为死信的三种情况: 1. 队列消息长度到达限制; 2. 消费者拒接消费消息,basicNack/basicReject,并且不把消息重新放入原目标队列,requeue=false; 3. 原队列存在消息过期设置,消息到达超时时间未被消费; **1.6** **延迟队列** TTL+死信队列 组合实现延迟队列的效果