0


Spring - RabbitMQ循环依赖问题解决

代码整合消息队列后,启动报错,出现rabbitMQ循环依赖的问题

异常信息:

  1. ┌─────┐
  2. | rabbitTemplate defined in class path resource [org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration$RabbitTemplateConfiguration.class]
  3. | myRabbitConfig (field org.springframework.amqp.rabbit.core.RabbitTemplate com.xxxx.gulimall.order.config.MyRabbitConfig.rabbitTemplate)
  4. └─────┘

解决方法:

  1. 注释掉 @Autowired和@PostConstruct注解
  2. 自己给容器中放一个RabbitTemplate,参考RabbitAutoConfiguration$RabbitTemplateConfiguration.class
  3. 手动初始化模板方法
  1. @Primary
  2. @Bean
  3. public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
  4. RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
  5. this.rabbitTemplate = rabbitTemplate;
  6. rabbitTemplate.setMessageConverter(messageConverter());
  7. initRabbitTemplate();
  8. return rabbitTemplate;
  9. }

完整代码:

  1. @Configuration
  2. public class MyRabbitConfig {
  3. RabbitTemplate rabbitTemplate;
  4. @Primary
  5. @Bean
  6. public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
  7. RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
  8. this.rabbitTemplate = rabbitTemplate;
  9. rabbitTemplate.setMessageConverter(messageConverter());
  10. initRabbitTemplate();
  11. return rabbitTemplate;
  12. }
  13. @Bean
  14. public MessageConverter messageConverter() {
  15. return new Jackson2JsonMessageConverter();
  16. }
  17. // @PostConstruct // MyRabbitConfig 对象创建完成以后,执行这个方法
  18. public void initRabbitTemplate() {
  19. rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
  20. @Override
  21. public void confirm(CorrelationData correlationData, boolean b, String s) {
  22. System.out.println("confirm...correlationData=" + correlationData + ", b=" + b + ", s=" + s);
  23. }
  24. });
  25. rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
  26. @Override
  27. public void returnedMessage(@Nullable Message message, int replyCode, @Nullable String replyText, @Nullable String exchange, @Nullable String routingKey) {
  28. System.out.println("fail Message="+message+",replyCode="+replyCode+",replyText="+replyText +",exchange="+exchange+",routingKey="+routingKey);
  29. }
  30. });
  31. }
  32. }

版权声明:本文为shanghaibao123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/shanghaibao123/article/details/120347631


本文转载自: https://blog.csdn.net/2301_76144723/article/details/144150942
版权归原作者 随遇而安622&508 所有, 如有侵权,请联系我们删除。

“Spring - RabbitMQ循环依赖问题解决”的评论:

还没有评论