Неверное чтение загрузки RabbitMQ с пружиной @Конфигурация

#spring-boot #rabbitmq

#пружинный ботинок #кролик

Вопрос:

У меня есть приложение для загрузки spring с издателем, которое публикует сообщения для обмена сообщениями. Это прекрасно работает. Однако потребитель должен читать с другого разветвленного обмена. Проблема в том, что ConnectionFactory, похоже, получает настройки из конфигурации publsher. Конфигурации находятся в двух разных файлах @Configuration.

Похоже, что @RabbitListener не принимает ConsumerConfig.BINANCE_QUEUE

BINANCE_EXCHANGE И ОЧЕРЕДЬ не считываются.

 @Configuration public class ConsumerConfig {   public static final String BINANCE_EXCHANGE = "binance_exchange";  public static final String BINANCE_QUEUE = "binance_data";  public static final String ROUTING = "index_data";   @Bean  public Queue consumerQueue() {  return new Queue(BINANCE_QUEUE, true, false, false);  }   @Bean  public FanoutExchange consumerExchange() {  return new FanoutExchange(BINANCE_EXCHANGE);  }   @Bean  public Binding consumerBinding(Queue queue, FanoutExchange exchange) {  System.out.println(queue.toString());  return BindingBuilder.bind(queue).to(exchange);  }   @Bean  public MessageConverter consumerConverter() {  return new Jackson2JsonMessageConverter();  }   @Bean  public AmqpTemplate consumerTemplate(ConnectionFactory connectionFactory) {  final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);  rabbitTemplate.setMessageConverter(consumerConverter());  return rabbitTemplate;  } }  

Приведенная ниже конфигурация используется как издателем, так и подписчиком.

 @Configuration public class PublisherConfig {   public static final String EXCHANGE = "CRYPTO_AGGREGATES";  public static final String QUEUE = "crypto_aggregates";  //public static final String ROUTING = "test_routing";   @Bean  public Queue queue() {  return new Queue(QUEUE, true, false, false);  }   @Bean  public FanoutExchange exchange() {  return new FanoutExchange(EXCHANGE);  }   @Bean  public Binding binding(Queue queue, FanoutExchange exchange) {  Binding binding= BindingBuilder.bind(queue).to(exchange);  return binding;  }   @Bean  public MessageConverter converter() {  return new Jackson2JsonMessageConverter();  }    @Bean  public AmqpTemplate template(ConnectionFactory connectionFactory) {  final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);  rabbitTemplate.setMessageConverter(converter());  return rabbitTemplate;  } }  

Потребитель сообщений

 @Component public class Consumer {   private final StreamingCryptoReader streamingCryptoReader;   @Autowired  public Consumer(StreamingCryptoReader streamingCryptoReader) {  this.streamingCryptoReader = streamingCryptoReader;  }   @RabbitListener(queues = ConsumerConfig.BINANCE_QUEUE)  public void consumeMessageFromQueue(BinanceTradeHistorySend history) {   System.out.println("Last item consumed Binance trades: "   history.toString());  try {  streamingCryptoReader.addToList(history);   } catch (Exception e) {  System.out.println(e.getMessage());  }  } }  

Комментарии:

1. Spring использует одноэлементный шаблон, поэтому вам придется предоставить соединение для каждого экземпляра rabbitmq и использовать @Квалификатор для указания имени экземпляра, который вы хотите автоматически подключить к своему потребителю и издателю