RabbitMQ 尝试连接到本地主机

时间:2021-02-23 20:37:52

标签: java spring rabbitmq

我有一个在嵌入式 tomcat 上运行的 Spring Boot 应用程序,带有我这样配置的兔子侦听器

@Configuration
public class RabbitConfiguration {

    public static final String REQUEST_QUEUE = "from-beeline-req";
    public static final String REPLY_QUEUE = "from-beeline-reply";

    @Bean
    public Queue beelineRpcReqQueue() {
        return new Queue(REQUEST_QUEUE);
    }

    @Bean
    public Queue beelineRpcReplyQueue() {
        return new Queue(REPLY_QUEUE);
    }

    @Bean
    public RabbitTemplate rabbitTemplate(RabbitTemplateConfigurer configurer, ConnectionFactory connectionFactory) {
        RabbitTemplate template = new RabbitTemplate();
        configurer.configure(template, connectionFactory);
        template.setDefaultReceiveQueue(REQUEST_QUEUE);
        template.setReplyAddress(REPLY_QUEUE);
        template.setUseDirectReplyToContainer(false);
        return template;
    }

    @Bean
    public SimpleMessageListenerContainer replyListenerContainer(ConnectionFactory connectionFactory, RabbitTemplate rabbitTemplate) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueues(beelineRpcReplyQueue());
        container.setMessageListener(rabbitTemplate);
        return container;
    }
}

我的 application.yml 文件看起来像这样

spring:
  main:
    banner-mode: LOG
  rabbitmq:
    host: 172.29.14.45
    port: 5672
    username: guest
    password: guest
    template:
      reply-timeout: 15000

server:
  port: 8888

所以重点是我想连接到位于确切地址 (172.29.14.45) 的 Rabbit 服务器。创建的侦听器容器正在尝试连接到本地主机。它也会忽略兔子端口属性。

2021-02-23 23:04:59.715 [replyListenerContainer-1] INFO  (AbstractConnectionFactory.java:636) - Attempting to connect to: [localhost:5672]
2021-02-23 23:05:01.721 [replyListenerContainer-1] ERROR (AbstractMessageListenerContainer.java:1877) - Failed to check/redeclare auto-delete queue(s).
org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect

并在此之后继续重启消费者

2021-02-23 23:17:49.069 [replyListenerContainer-1] INFO  (SimpleMessageListenerContainer.java:1428) - Restarting Consumer@2a140ce5: tags=[[]], channel=null, acknowledgeMode=AUTO local queue size=0
2021-02-23 23:17:49.069 [replyListenerContainer-1] DEBUG (BlockingQueueConsumer.java:758) - Closing Rabbit Channel: null
2021-02-23 23:17:49.071 [replyListenerContainer-2] INFO  (AbstractConnectionFactory.java:636) - Attempting to connect to: [localhost:5672]

我该怎么做才能告诉 spring 使用我的主机属性而不是 localhost

2 个答案:

答案 0 :(得分:0)

我总是在 application.properties 文件中使用addresses 属性

spring.rabbitmq.addresses=amqp://username:password@host:port/vhost

“虚拟主机”(或 vhost)的名称指定协议引用的实体(例如交换和队列)的命名空间。请注意,这不是 HTTP 意义上的虚拟主机。

https://www.rabbitmq.com/uri-spec.html

示例:

spring.rabbitmq.addresses=amqp://ihrpsvpp:In4etuiIkgu7FVBr0tr6wYGvGcGyJ9Ja@lion.rmq.cloudamqp.com/ihrpsvpp

答案 1 :(得分:0)

好吧,原来是应用程序的bean刷新上下文,导致自动配置失败