Spring Boot使Rabbit MQ连接超时

问题描述

当尝试连接运行在单独主机/端口上的Rabbit MQ实例时,遇到此异常,该异常与使用者重新启动和超时有关

2020-08-22 10:23:25.189  INFO [events-to-slack,] 1057 --- [an)#6c74acb-100] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer: tags=[{}],channel=null,acknowledgeMode=AUTO local queue size=0
2020-08-22 10:23:25.203 ERROR [events-to-slack,] 1057 --- [an)#6c74acb-110] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s).

org.springframework.amqp.AmqpIOException: java.net.SocketTimeoutException: connect timed out
    at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:71)
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:306)
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:547)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1389)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1370)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1346)
    at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:336)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.redeclareElementsIfNecessary(SimpleMessageListenerContainer.java:1128)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$800(SimpleMessageListenerContainer.java:99)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1304)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketTimeoutException: connect timed out

我正在使用弹簧靴1.5.18。使用Java 1.8

这些是我为Rabbit-mq进行的配置设置,在这里我们可以看到它只是使用主题交换和绑定来设置带有Queue绑定的侦听器

 @RequiredArgsConstructor
@Configuration
public class RabbitMQConfiguration implements RabbitListenerConfigurer {

    private final Config configuration;
    private final RetryConfiguration retryConfig;

    @Bean
    public TopicExchange exchange() {
        return new TopicExchange(configuration.getExchange());
    }

    @Bean
    public TopicExchange delayExchange() {
        TopicExchange topicExchange = new TopicExchange(configuration.getDelayExchange());
        topicExchange.setDelayed(true);
        return topicExchange;
    }

    @Bean
    public Queue queue() {
        return new Queue(configuration.getQueue());
    }

    @Bean
    public List<Binding> bindings(@Qualifier("exchange") TopicExchange exchange,@Qualifier("delayExchange") TopicExchange delayExchange,@Qualifier("queue") Queue queue) {
        List<Binding> binding = new ArrayList<>();

        for (String routingKey : configuration.getRoutingKeys()) {
            binding.add(BindingBuilder.bind(queue).to(exchange).with(routingKey));
            binding.add(BindingBuilder.bind(queue)
                    .to(delayExchange)
                    .with(retryConfig.getPrefix() + routingKey));
        }
        return binding;
    }

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

    @Bean
    public MappingJackson2MessageConverter consumerJackson2MessageConverter() {
        return new MappingJackson2MessageConverter();
    }

    @Bean
    public DefaultMessageHandlerMethodFactory messageHandlerMethodFactory() {
        DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
        factory.setMessageConverter(consumerJackson2MessageConverter());
        return factory;
    }

    @Override
    public void configureRabbitListeners(RabbitListenerEndpointRegistrar endpointRegistrar) {
        endpointRegistrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory());
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)