Невозможно подключить Spring AMQP / Rabbit MQ: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: в соединении отказано: подключение

Я новичок в Spring AMQP / Rabbit MQ.

Я использую Spring AMQP / Rabbit MQ в своем проекте. Я столкнулся со следующей ошибкой после запуска tomcat:

org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - исключение, вызванное потребителем, обработка может быть перезапущена, если фабрика соединений это поддерживает.

Сводка исключения: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: в соединении отказано: соединение

Ниже представлен файл конфигурации:

весна-amqp.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/rabbit        http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">

    <rabbit:connection-factory id="connectionFactory" host="127.0.0.1"/>
    <rabbit:admin connection-factory="connectionFactory"/>

    <rabbit:template connection-factory="connectionFactory" id="rabbitTemplate" channel-transacted="true"/>
    <rabbit:queue name="proposalQueue" />

    <rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener ref="listener" queue-names="proposalQueue"/>
    </rabbit:listener-container>

    <bean id="rabbitMQTransactionManager" class="org.springframework.amqp.rabbit.transaction.RabbitTransactionManager">
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>

    <rabbit:direct-exchange name="myExchange">
        <rabbit:bindings>
             <rabbit:binding queue="proposalQueue" key="userMesssage" />
        </rabbit:bindings>
    </rabbit:direct-exchange>
    <bean id="listener" class="com.xxx.xxxx.rabbitmq.QueueServer"/>
 </beans>

QueueServer.java

@Override
    public void onMessage(Message message) {

    Map<String, Object> result = new HashMap<>();       
    MessageProperties props = message.getMessageProperties();
    BasicProperties replyProps = new BasicProperties.Builder().correlationId(new String(message.getMessageProperties().getCorrelationId())).build();
    String inputParameterStr = new String(message.getBody());

        try {
            Map<String,Object> inputParameters  = (Map<String, Object>) Utility.StringToObject(inputParameterStr, "java.util.Map");
            result = service.createQueue(inputParameters);

        } catch (ClassNotFoundException e) {
            logger.error("Error :::: "+getClass()+proposalID, e);
            result.put(Constants.FAILURE, e.getMessage());
        } catch (Exception e) {
            logger.error("Error :::: "+getClass()+proposalID, e);
            result.put(Constants.FAILURE, e.getMessage());
        }
    }

Пожалуйста, помогите решить.


person AmolKumar    schedule 25.11.2015    source источник


Ответы (4)


java.net.ConnectException: в соединении отказано: соединение

Это просто означает, что RabbitMQ не работает на localhost (127.0.0.1) на стандартном порту (5672).

Вы скачали и установили / запустили RabbitMQ? Это не похоже на ActiveMQ - он не может быть встроен в Java-приложение.

person Gary Russell    schedule 25.11.2015
comment
да. RabbitMQ (3.5.6) и ERLANG (otp_win32_18.1.exe) установлены на c :. Статус сервиса RabbitMQ - запущен. - person AmolKumar; 26.11.2015
comment
Ну, он явно не прослушивает порт 5672 (по умолчанию). Попробуйте netstat -ano | find "5672" в cmd окне; если он действительно слушает, вы должны увидеть 127.0.0.1:5672 ... LISTENING. Посмотрите журналы rabbitmq, чтобы узнать, есть ли там информация. - person Gary Russell; 26.11.2015
comment
спасибо .. Я проверил это на cmd, но там нет порта для прослушивания, как вы сказали: 127.0.0.1:5672, и, пожалуйста, сообщите мне путь, по которому создается журнал. Rabbit mq работает на 25672 (проверьте в мониторе ресурсов.) - person AmolKumar; 26.11.2015
comment
Я не знаком с кроликом в Windows; извиняюсь; но похоже, что с вашей установкой возникла проблема; согласно эта ссылка, 25672 используется для кластеризации, поэтому странно, что он слушает, но не 5672; вам нужно найти, где находятся журналы, и посмотреть их. Если все остальное терпит неудачу; есть группа пользователей rabbitmq-users в google для вопросов о самом rabbitmq (не задавайте там вопросов о spring-amqp; это подходящее место для этого.) - person Gary Russell; 26.11.2015
comment
Спасибо, Гэри. Я переустанавливаю Rabbitmq по ссылке, которую вы даете. тем не менее, он использует порт 25672, и ошибка такая же. На другом компьютере выполняется такая же процедура установки, и все сделано хорошо. - person AmolKumar; 27.11.2015

Проверьте значение хоста и порта

В application.properties

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

введите здесь описание изображения

См. Сайт RabbitMQ, работающий на порту 15672, тогда как в коде используется протокол amqp.

person Atul Jain    schedule 07.01.2020

Есть еще один аспект проблемы.

По умолчанию RabbitMQ доступен только для локального компьютера. Если вы хотите получить к нему доступ с другой машины, вы обычно создаете одну запись в файле "rabbitmq.config". Расположение этого файла зависит от ОС. В Linux вы можете найти его по адресу: «/etc/rabbitmq/rabbitmq.config», а на компьютере с Windows вы можете найти его по адресу: «C: \ Program Files \ RabbitMQ Server \ rabbitmq_server-3.6.9 \ etc \ rabbitmq.config ".

Возможно, вы не найдете этот файл в указанном месте. Это необязательный файл, и вам не нужно беспокоиться, если он вообще отсутствует. Вы можете создать свой собственный. Эта запись выглядит примерно так:

[{rabbit, [{tcp_listeners, [{"<IP_OF_MACHINE>", 5672}]},{loopback_users, []}]}].

Благодаря этому вы можете получить доступ к серверу с любого удаленного компьютера.

Если после этого вы сделаете сервер недоступным, вы можете изменить запись на:

[{rabbit, [{tcp_listeners, [{"0.0.0.0", 5672}]},{loopback_users, []}]}].

Вы обязательно подключите сервер к любому клиенту, а также через консоль управления (если плагин включен)

person Ajay Sodhi    schedule 28.05.2018

Чтобы получить доступ к удаленному RabbitMQ, вам необходимо разрешить входящий TCP-трафик на портах 4369, 25672, 5671, 5672, 15672, 61613, 61614, 1883 и 8883.

sudo firewall-cmd --zone=public --permanent --add-port=4369/tcp --add-port=25672/tcp --add-port=5671-5672/tcp --add-port=15672/tcp  --add-port=61613-61614/tcp --add-port=1883/tcp --add-port=8883/tcp
sudo firewall-cmd --reload
person Green Lei    schedule 18.05.2018