RabbitMQ参数

编程

ACK确认模式

AcknowledgeMode.NONE :不确认

1. 默认所有消息消费成功,会不断的向消费者推送消息

2. 因为rabbitMq认为所有消息都被消费成功,所以队列中不在存有消息,消息存在丢失的危险

AcknowledgeMode.AUTO:自动确认

1. 由spring-rabbit依据消息处理逻辑是否抛出异常自动发送ack(无异常)或nack(异常)到server端。

存在丢失消息的可能,如果消费端消费逻辑抛出异常,也就是消费端没有处理成功这条消息,那么就相当于丢失了消息

如果消息已经被处理,但后续代码抛出异常,使用 Spring 进行管理的话消费端业务逻辑会进行回滚,

这也同样造成了实际意义的消息丢失

2. 使用自动确认模式时,需要考虑的另一件事是消费者过载

AcknowledgeMode.MANUAL:手动确认

1. 手动确认则当消费者调用 ack、nack、reject 几种方法进行确认,手动确认可以在业务失败后进行一些操作,

如果消息未被 ACK 则会发送到下一个消费者

2. 手动确认模式可以使用 prefetch,限制通道上未完成的(“正在进行中的”)发送的数量

mandatory: (spring.rabbitmq.template.mandatory)

1. 当其值为true时,交换器无法根据自身的类型和路由键匹配到符合条件的队列,这时rabbitMQ就会通过回调函数将消息返回给生产者。

2. 当其值为false时,如果出现上述情形,则消息会丢失

Auto

1. 如果消息成功被消费(成功的意思是在消费的过程中没有抛出异常),则自动确认

2. 当抛出 AmqpRejectAndDontRequeueException 异常的时候,则消息会被拒绝,且 requeue = false(不重新入队列)

3. 当抛出 ImmediateAcknowledgeAmqpException 异常,则消费者会被确认

4. 其他的异常,则消息会被拒绝,且 requeue = true,此时会发生死循环,

可以通过 setDefaultRequeueRejected(默认是true)去设置抛弃消息

以上是 RabbitMQ参数 的全部内容, 来源链接: utcz.com/z/512003.html

回到顶部