我有一个在嵌入式 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
?
答案 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刷新上下文,导致自动配置失败