【问题标题】:Spring RabbitMQ tutorial results in Connection Refused errorSpring RabbitMQ 教程导致 Connection Refused 错误
【发布时间】:2015-05-13 19:01:04
【问题描述】:

我是一位经验丰富的 Java 程序员,我是第一次尝试 Spring Rabbit MQ。

我使用 Maven 完全遵循了消息传递-rabbitMQ 教程。 http://spring.io/guides/gs/messaging-rabbitmq/

我以用户帐户在 CentOS 上运行。

当我在教程的最后使用java -jar target/gs-messaging-rabbitmq-0.1.0.jar 运行应用程序时,我收到以下连接被拒绝错误。有人可以帮忙吗?

prompt> java -jar target/gs-messaging-rabbitmq-0.1.0.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.2.3.RELEASE)

2015-05-13 11:49:44.833  INFO 26218 --- [           main] hello.Application                        : Starting Application v0.1.0 on minerva-02-33.gbcl.net with PID 26218 (/home/ccpm/test/spring_rabbitmq/target/gs-messaging-rabbitmq-0.1.0.jar started by ccpm in /home/ccpm/test/spring_rabbitmq)
2015-05-13 11:49:44.912  INFO 26218 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@8146158: startup date [Wed May 13 11:49:44 PDT 2015]; root of context hierarchy
2015-05-13 11:49:45.863  INFO 26218 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.amqp.rabbit.annotation.RabbitBootstrapConfiguration' of type [class org.springframework.amqp.rabbit.annotation.RabbitBootstrapConfiguration$$EnhancerBySpringCGLIB$$9a886eed] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2015-05-13 11:49:46.397  INFO 26218 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2015-05-13 11:49:46.404  INFO 26218 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483647
2015-05-13 11:49:46.433 ERROR 26218 --- [cTaskExecutor-1] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s).

org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused
    at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:54)
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:207)
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:441)
    at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:80)
    at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:130)
    at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:67)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1035)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1028)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1004)
    at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:254)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.redeclareElementsIfNecessary(SimpleMessageListenerContainer.java:947)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$300(SimpleMessageListenerContainer.java:82)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1065)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.java:32)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:615)
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:199)
    ... 12 common frames omitted

Waiting five seconds...
2015-05-13 11:49:51.437  WARN 26218 --- [cTaskExecutor-1] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it. Exception summary: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused
2015-05-13 11:49:51.437  INFO 26218 --- [cTaskExecutor-1] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer: tags=[{}], channel=null, acknowledgeMode=AUTO local queue size=0
2015-05-13 11:49:51.441 ERROR 26218 --- [cTaskExecutor-2] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s).

org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused
    at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:54)
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:207)
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:441)
    at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:80)
    at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:130)
    at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:67)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1035)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1028)
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1004)
    at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:254)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.redeclareElementsIfNecessary(SimpleMessageListenerContainer.java:947)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$300(SimpleMessageListenerContainer.java:82)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1065)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.java:32)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:615)
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:199)
    ... 12 common frames omitted

【问题讨论】:

  • RabbitMQ 服务器安装在哪里?是在同一台服务器上吗?
  • @Leon:我不知道。我只是按照该教程中的说明进行操作。教程步骤是否包含服务器?
  • 不,它没有...完整答案传入

标签: java spring rabbitmq spring-amqp


【解决方案1】:

您没有安装 RabbitMQ 服务器。幸运的是,这很容易做到。您提到您使用的是 CentOS,您可以在这里下载 RabbitMQ 服务器:https://www.rabbitmq.com/install-rpm.html

您需要遵循几个步骤,包括安装 Erlang。

Spring 示例假设您已经对使用消息代理有所了解。这本身就是一项您需要使用的技术,就像您必须学习使用数据库或操作系统时一样。

【讨论】:

  • 教程网页http://spring.io/guides/gs/messaging-rabbitmq/ 顶部清楚地写着:“本指南将引导您完成设置发布和订阅消息的 RabbitMQ AMQP 服务器的过程。”为什么我完成所有步骤后会这样说而不设置服务器?
  • 我认为这是一个措辞问题。本教程向您展示如何为 RabbitMQ 创建发布者和消费者
  • 是的;你必须自己安装rabbitmq。 Spring 应用程序只是一个使用代理的客户端。我打开了an issue against the guide。安装服务器请参考rabbitmq site
  • 不,不是,示例使用了 Spring 提供的默认 bean。你可以创建一个这个docs.spring.io/spring-amqp/docs/latest-ga/api/org/…的bean
【解决方案2】:

这是一个老问题,但无论如何我都会发布我的答案,因为它解决了 Spring 教程的这个特定步骤的问题,而其他答案没有。

如果您使用 Spring 教程中指定的 docker-compose.yml 文件在 Docker 容器中启动 RabbitMQ 服务器,您可能会遇到与我在此问题中概述的相同的问题;

Docker image for Spring/RabbitMQ tutorial results in connection refused

几天后又回来了,虽然我设法找到了解决方案;

https://stackoverflow.com/a/44882772/8215811

不幸的是,Spring 教程没有说明在选择使用 docker-compose 文件而不是手动安装 RabbitMQ 时需要配置连接信息,这很不幸,因为 Docker 方法似乎更简单直接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多