UltraXiaoZi
2023-10-26 13:34:28 +08:00
如果你用的是 spring-rabbitmq ,自动模式不会丢失数据,抛出异常后消息会回退,这个你可以自己试一下就知道了,和手动确认的唯一区别是 spring 封装了一个异常类,如果不想出现异常,就抛出 AmqpRejectAndDontRequeueException ,另外你可以看一下 org.springframework.amqp.core.AcknowledgeMode 的注释
/**
* Auto - the container will issue the ack/nack based on whether
* the listener returns normally, or throws an exception.
* <p><em>Do not confuse with RabbitMQ {@code autoAck} which is
* represented by {@link #NONE} here</em>.
*/
AUTO;
明确告诉你了,这里面的 AUTO 并不是 rabbitmq 中的 auto ,本质上也是手动,只是被 spring 封装了一层,当然你也可以用手动,但是那样对代码的侵入性太高了,而且这种这种通用处理一般建议是抽离到业务代码之外,便于全局控制和保持一致的处理方式,除非你有非常特别的用需要使用 channel 进行操作