Не удалось подключить Spring AMQP/Rabbit MQ: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Соединение отказано: connect
Я новичок в Spring AMQP/Rabbit MQ.
Я использую Spring AMQP/Rabbit MQ в моем проекте. Перед запуском tomcat возникает следующая ошибка:
org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - исключение, вызванное потребителем, обработка может быть перезапущена, если фабрика соединений поддерживает ее.
Сводная информация об исключении: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: соединение отклонено: connect
Ниже приведен файл конфигурации:
весна-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());
}
}
Пожалуйста, помогите решить.
Ответы
Ответ 1
java.net.ConnectException: соединение отклонено: connect
Это просто означает, что RabbitMQ не работает на localhost
(127.0.0.1
) на стандартном порту (5672).
Загрузили и установили/запустили RabbitMQ? Это не похоже на ActiveMQ - он не может запускаться в Java-приложении.
Ответ 2
Есть еще один аспект проблемы.
По умолчанию 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, []}]}].
Вы обязательно подключите сервер к любому клиенту, а также через консоль управления (если плагин включен)
Ответ 3
Для доступа к удаленному 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