2016-11-29 6 views
1

Я пытаюсь использовать RabbitMQ для размещения сообщений из одного приложения и получения их в другом. Эти приложения размещаются в Cloud Foundry, и оба они привязаны к одному экземпляру RabbitMQ.Connection отказался от чтения с RabbitMQ Queue на Cloud Foundry с использованием Spring

Я могу отправлять сообщения в очередь из первого приложения, но в моем втором приложении, которое использует @RabbitListener и @RabbitHandler для прослушивания этой очереди, я получаю сообщение об ошибке «Отказано в соединении». Однако он хорошо работает на моем локальном экземпляре RabbitMQ.

Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: errno: 111 (Connection refused), error: Connection refused (local port 45596 to address 127.0.0.1 (localhost), remote port 5672 to address 127.0.0.1 (localhost))

Это полный журнал.

Удаленный порт, я наблюдаю, остается неизменным на уровне 5672, но локальный порт продолжает меняться с журнала на журнал. Я не уверен, откуда берутся эти порты, так как я полагаю, что Spring должна справиться с этим для меня, а также потому, что у меня есть аналогичная настройка для моего первого приложения, которое, кажется, работает нормально.

Вот как мой конфиг looks-

@Bean 
     public MessageConverter jsonMessageConverter(){ 
      return new Jackson2JsonMessageConverter(); 
     } 

     @Bean 
     public AmqpAdmin amqpAdmin(ConnectionFactory connectionFactory) { 
      return new RabbitAdmin(connectionFactory); 
     } 

     @Bean 
     public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { 
      RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); 
      rabbitTemplate.setMessageConverter(jsonMessageConverter()); 
      return rabbitTemplate; 
     } 

     @Bean 
     public SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory rabbitConnectionFactory) { 
      SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
      container.setConnectionFactory(rabbitConnectionFactory); 
      container.setQueueNames("queue2911"); 
      container.setAutoStartup(false); 
      //container.setMessageListener(exampleListener()); 
      return container; 
     } 

Любая помощь будет оценена.

ответ

0

Операционная система выбирает локальный порт.

Тот факт, что вы пытаетесь подключиться к localhost, подразумевает, что вы используете фабрику соединений с настройками по умолчанию (localhost: 5672) вместо загруженной конфигурации.

Включите ведение журнала DEBUG для обоих приложений и сравните отчеты о автоматической конфигурации.

+0

Я столкнулся с аналогичной проблемой с моим первым приложением ранее, когда сам создавал бобы для фабрики соединений. Чтобы разрешить это, я переключился на передачу фабрики соединений в качестве параметра на конструктор шаблона кролика, и это сработало. Тогда я последовал аналогичному подходу, но здесь я не могу понять, как эти конфигурации сопоставляются с моим @ rabbitlistener, так как, в отличие от моего первого приложения, нет автоссылки, а просто аннотации. Не могли бы вы помочь мне понять, как эти бобы на самом деле сопоставляются с аннотациями @ rabbitlistener и @ rabbithandler? Благодаря! –

+0

Автоконфигурация Spring Boot создает фасоль фабрики соединений и фасоль фабрики контейнеров для кроликов, которая используется для создания контейнера-слушателя для каждой аннотации '@ RabbitListener' - см. [Здесь] (https://github.com/spring-projects /spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAnnotationDrivenConfiguration.java#L62). –

+0

Aah. Понимаю. Таким образом, по существу @RabbitListener не должен требовать дополнительной настройки, кроме кролика? –

 Смежные вопросы

  • Нет связанных вопросов^_^