【spring cloud】stream集成rabbitMQ实现降级和接口升版

本文介绍了如何在Spring Cloud Stream中结合RabbitMQ实现消息消费的降级处理。当消息多次消费失败后,不仅将其放入死信队列,还通过@ServiceActivator进行异常处理。代码示例展示了如何通过@StreamListener监听fallback-topic,并根据payload中的version字段实现不同版本接口的支持,确保服务的稳定性和兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当消息多次消费失败后,只将消息放入死信队列其实是不够的,至少也得给个静默处理的结果吧,也就是所谓的降级处理。

引入依赖、创建topic等工作就不再赘述,可以参考上篇文章:【spring cloud】stream集成rabbitMQ,实现Topic订阅发布

配置如下:

#Fallback配置
spring.cloud.stream.bindings.fallback-consumer.destination=fallback-topic
spring.cloud.stream.bindings.fallback-producer.destination=fallback-topic
#重试次数(本机重试,不发回mq)(次数等于1相当于不重试)
spring.cloud.stream.bindings.fallback-consumer.consumer.max-attempts=2
spring.cloud.stream.bindings.fallback-consumer.group=fallback-group


注意,这里的配置只是正常的绑定exchange、本地重试等配置,与降级无关。

降级真正的处理在于consumer的代码:

    //Fallback+升版
    @StreamListener(FallBackTopic.INPUT)
    public void goodbyeBadGut(Object payLoad,
                              @Header("version") String version) {
        log.info("  Fallback - r u ok");
        if ("1.0".equalsIgnoreCase(version)) {
            log.info("Fallback - fine, 3ku,and u?");
        }
        else if ("2.0".equalsIgnoreCase(version)){
            log.info("Fallback - Unsurported Version");
            throw new RuntimeException("DLQ - I'm not OK");
        }
        else {
            log.info("Fallback - version={}",version);
        }
        log.info("Fallback - Error message consumed successfully, payLoad={}", payLoad);
    }

    @ServiceActivator(inputChannel = "fallback-topic.fallback-group.errors")
    public void fallback(Message<?>message){
        log.info("fallback entered");
    }

通过注解 @ServiceActivator,使来自于信道(值为队列名称)的消息在抛出异常后实现降级。

而代码中的version字段,则可以使得consumer支持不同版本的接口,实现接口升版和兼容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值