Connection拒绝尝试使用Spring从Cloud Foundry上读取RabbitMQ Queue

时间:2016-11-29 08:33:17

标签: spring spring-boot rabbitmq cloudfoundry spring-amqp

我正在尝试使用RabbitMQ从一个应用程序发布消息并在另一个应用程序中接收它们。这些应用程序托管在Cloud Foundry上,并且两者都绑定到RabbitMQ的同一个实例。

我能够从第一个应用程序向队列发送消息,但在我的第二个应用程序中,它使用@RabbitListener和@RabbitHandler来侦听此队列,我收到连接被拒绝错误。它虽然在我的本地RabbitMQ实例上运行良好。

  

消费者引发异常,如果连接处理可​​以重启   工厂支持它。例外摘要:   org.springframework.amqp.AmqpConnectException:   java.net.ConnectException:错误号:111(连接被拒绝),错误:   连接被拒绝(本地端口45596到地址127.0.0.1(localhost),   远程端口5672到地址127.0.0.1(localhost))

这是完整的日志。

我观察到远程端口在5672处保持不变,但本地端口不断从日志更改为日志。我不确定这些端口是从哪里拿起来的,因为我认为Spring应该为我处理这个,并且因为我的第一个应用程序有类似的设置,这似乎工作正常。

以下是我的配置的外观 -

@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;
        }

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

操作系统选择本地端口。

您尝试连接到localhost的事实意味着您正在使用具有默认值的连接工厂(localhost:5672)而不是引导配置的工厂。

打开两个应用程序的DEBUG日志记录并比较自动配置报告。