Я пытаюсь использовать 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;
}
Любая помощь будет оценена.
Я столкнулся с аналогичной проблемой с моим первым приложением ранее, когда сам создавал бобы для фабрики соединений. Чтобы разрешить это, я переключился на передачу фабрики соединений в качестве параметра на конструктор шаблона кролика, и это сработало. Тогда я последовал аналогичному подходу, но здесь я не могу понять, как эти конфигурации сопоставляются с моим @ rabbitlistener, так как, в отличие от моего первого приложения, нет автоссылки, а просто аннотации. Не могли бы вы помочь мне понять, как эти бобы на самом деле сопоставляются с аннотациями @ rabbitlistener и @ rabbithandler? Благодаря! –
Автоконфигурация 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). –
Aah. Понимаю. Таким образом, по существу @RabbitListener не должен требовать дополнительной настройки, кроме кролика? –