消息没有消费成功咋办?重试?这里介绍下本地重试和多节点的范例。
引入依赖、创建topic等工作就不再赘述,可以参考上篇文章:【spring cloud】stream集成rabbitMQ,实现Topic订阅发布
本地重试
配置如下:
#异常消息(单机版)
spring.cloud.stream.bindings.error-consumer.destination=error-out-topic
spring.cloud.stream.bindings.error-producer.destination=error-out-topic
#重试次数(本机重试,不发回mq)(次数等于1相当于不重试)
spring.cloud.stream.bindings.error-consumer.consumer.max-attempts=2
只需要指定重试次数,即可开启本地重试。超过重试次数,还是会把异常抛出来。
多节点重试
所谓多节点重试,其实是消息的重新入列(Requeue),再次从队列到消费者的动作。
配置如下:
#异常消息(requeue重试)
spring.cloud.stream.bindings.requeue-consumer.destination=requeue-topic
spring.cloud.stream.bindings.requeue-producer.destination=requeue-topic
#仅对当前requeue-consumer,开启requeue
spring.cloud.stream.rabbit.bindings.requeue-consumer.consumer.requeueRejected=true
#默认全局开启requeue
spring.rabbitmq.listener.defaul-requeue-rejected=true
#和requeue属性冲突,指定成1可避免冲突(1表示不本机重试)
spring.cloud.stream.bindings.requeue-consumer.consumer.max-attempts=1
需要注意的是,要把本地重试的属性置为1(默认不为1)以避免配置冲突。
spring.cloud.stream.bindings.requeue-consumer.consumer.max-attempts=1