weixin_42251775 2022-06-24 10:48 采纳率: 0%
浏览 191

RabbitTemplate回调出错

使用 RabbitTemplate 回调时出现错误,


java.lang.IllegalStateException: Only one ConfirmCallback is supported by each RabbitTemplate
    at org.springframework.util.Assert.state(Assert.java:73)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.setConfirmCallback(RabbitTemplate.java:447)
    at com.itheima.pinda.goods.service.impl.ShippingServiceImpl.failMsgToRabbitmq(ShippingServiceImpl.java:676)
    at com.itheima.pinda.goods.service.impl.ShippingServiceImpl.submitToWMS(ShippingServiceImpl.java:661)
    at com.itheima.pinda.goods.service.impl.ShippingServiceImpl.submitToWMS(ShippingServiceImpl.java:543)
    at com.itheima.pinda.goods.service.impl.ShippingServiceImpl$$FastClassBySpringCGLIB$$a7f9348c.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685)
    at com.itheima.pinda.goods.service.impl.ShippingServiceImpl$$EnhancerBySpringCGLIB$$26aaa855.submitToWMS(<generated>)
    at com.itheima.pinda.goods.controller.ShippingController.submitToWMS(ShippingController.java:128)

将单例改成多例模式


 @Bean
    @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory)
    {
        final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        //设置Json转换器
        rabbitTemplate.setMessageConverter(jsonMessageConverter());

        return rabbitTemplate;
    }

不起作用,然后 添加

 @Bean
    @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE,**proxyMode = ScopedProxyMode.TARGET_CLASS)**
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory)
    {
        final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
       
        //设置Json转换器
        rabbitTemplate.setMessageConverter(jsonMessageConverter());

        return rabbitTemplate;
    }

发现不报错了,但是回调不执行了,


  rabbitTemplate.setConfirmCallback((correlationData, b, s) -> {
                        if (b){
                            log.info("failMsgToRabbitmq消息成功发送:key= {} and value= {}",key,result.get(key));
                        }else {
                            log.info("failMsgToRabbitmq消息失败发送:key= {} and value= {},{}", key, result.get(key), s);
                        }
                    });
                    rabbitTemplate.convertAndSend(RabbitMqConfig.DIRECT_EXCHANGE_REMIND, RabbitMqConfig.REMIND_ROUTING_KEY, result);

抓狂,求指点迷津


  • 写回答

4条回答 默认 最新

  • 皮蛋不吃粥 2022-06-24 11:26
    关注

    confirm机制需要设置Mandatory属性,配置了?

    评论

报告相同问题?

问题事件

  • 创建了问题 6月24日

悬赏问题

  • ¥20 朋友下软件后桌面变成这样,怎么办?
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 NRF24L01能发送但是不能接收
  • ¥15 想问一下这种情况怎么解决呢(关键词-file)
  • ¥15 python Flassk 模块部署 服务器时报错
  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?