Учебник Spring RabbitMQ приводит к ошибке отказа в подключении

Я опытный программист на Java и впервые пробую Spring Rabbit MQ.

Я следовал руководству по обмену сообщениями RabbitMQ точно, используя Maven. 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

person stackoverflowuser2010    schedule 13.05.2015    source источник
comment
Где установлен сервер RabbitMQ? Это на том же сервере?   -  person Leon    schedule 13.05.2015
comment
@Леон: я не знаю. Я просто следовал инструкциям в этом уроке. Включены ли в шаги руководства сервер?   -  person stackoverflowuser2010    schedule 13.05.2015
comment
Нет, не... полный ответ поступает   -  person Leon    schedule 13.05.2015


Ответы (2)


У вас не установлен сервер RabbitMQ. К счастью, это довольно легко сделать. Вы упомянули, что используете CentOS, здесь вы можете скачать сервер RabbitMQ: https://www.rabbitmq.com/install-rpm.html

Вам нужно будет выполнить несколько шагов, включая установку Erlang.

В примере Spring предполагается, что вы уже немного знакомы с использованием брокера сообщений. Это сама по себе технология, которую вам нужно будет использовать, например, когда вам нужно было научиться использовать базу данных или операционную систему.

person Leon    schedule 13.05.2015
comment
На веб-странице с руководством по адресу http://spring.io/guides/gs/messaging-rabbitmq/ вверху четко сказано: Это руководство проведет вас через процесс настройки сервера RabbitMQ AMQP, который публикует сообщения и подписывается на них. Почему он сказал это и не настроил сервер, когда я выполню все шаги? - person stackoverflowuser2010; 13.05.2015
comment
Я думаю, что это проблема формулировки. В этом руководстве показано, как создать издателя и потребителя для RabbitMQ. - person Leon; 13.05.2015
comment
@ stackoverflowuser2010 Может быть, потому что часть документов отсутствует? Бывает. Я бы с подозрением отнесся к тому, что он сказал, что инструкции по установке были ниже, а потом их не было. - person Dave Newton; 13.05.2015
comment
Да; вам нужно установить сам rabbitmq. Приложение Spring — это просто клиент, использующий брокера. Я открыл проблему с руководством. Обратитесь к сайту Rabbitmq, чтобы узнать, как установить сервер. - person Gary Russell; 13.05.2015
comment
@GaryRussell: После установки RabbitMQ, как мне подключить библиотеку Spring к этому серверу RabbitMQ? Я не вижу ничего, говорящего о локальном хосте или другом IP-адресе. - person stackoverflowuser2010; 13.05.2015
comment
Исправлено руководство через github.com/spring-guides/gs-messaging- rabbitmq/коммит/ - person gregturn; 13.05.2015
comment
@ stackoverflowuser2010 вам нужно будет предоставить bean-компонент ConnectionFactory со свойствами для подключения к настроенному серверу. - person Leon; 13.05.2015
comment
@Леон: Спасибо. Этот bean-компонент ConnectionFactory находится в исходных примерах на этой веб-странице? На веб-странице есть два класса Java, Application.java и Receiver.java. Я не вижу упоминания о параметрах подключения. - person stackoverflowuser2010; 13.05.2015
comment
Нет, в примере используется bean-компонент по умолчанию, предоставленный Spring. Вы можете создать компонент этого docs.spring.io/spring-amqp/docs/latest-ga/api/org/ - person Leon; 13.05.2015
comment
Spring Boot (соглашение вместо конфигурации) устанавливает значения по умолчанию localhost:5672 github.com/spring-projects/spring-boot/blob/master/ Предполагается, что сервер rabbitmq находится на локальном хосте порт по умолчанию. См. документацию по весенней загрузке. о том, как настроить свойства. - person Gary Russell; 13.05.2015

Это старый вопрос, но я все равно опубликую свой ответ, поскольку он решает проблему с этим конкретным шагом учебника Spring, которой нет в другом ответе.

Если вы используете файл docker-compose.yml, указанный в руководстве Spring, для запуска сервера RabbitMQ в контейнере Docker, вы можете столкнуться с той же проблемой, что и у меня при подключении к нему, которую я описал в этом вопросе;

Образ Docker для учебника Spring/RabbitMQ приводит к отказу в соединении

Вернувшись к этому через пару дней, мне удалось найти решение;

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

Учебник Spring, к сожалению, не поясняет, что вам нужно настраивать информацию о подключении при выборе использования файла docker-compose вместо ручной установки RabbitMQ, что досадно, поскольку метод Docker кажется более простым и понятным.

person ionised    schedule 03.07.2017