Новое соединение RabbitMQ отказалось из-за SocketException

при попытке создать новое соединение с rabbitmq, работающим на другом сервере, я получил следующую ошибку:

java.io.IOException
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:406)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:533)


Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; reason: java.net.SocketException: Connection reset


at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343)
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:216)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)



Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at java.io.DataInputStream.readUnsignedByte(Unknown Source)
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:131)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:533)

Сделанные шаги:

  • rabbitmq работает на сервере.
  • указан сервер
  • указан порт по умолчанию

lsof -i tcp: 5672

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

beam.smp 3084 rabbitmq 15u IPv6 18611 0t0 TCP *: amqp (LISTEN)

rabbitmqctl list_connections

Листинг соединений... guest client_server 55765 работает ... сделано.

netstat -tapnl | grep 5672

tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 3084/beam.smp

tcp 0 0 0.0.0.0:55672 0.0.0.0:* LISTEN 3084/beam.smp

tcp 0 0: 5672: * LISTEN 3084/beam.smp

Ответ 1

Одна из возможных причин заключается в том, что пользователь, с которым вы подключаетесь, в RabbitMQ не имеет прав на доступ к виртуальным хостам.

Это можно проверить с помощью Плагина управления (вкладка "Администратор" ).

Ответ 2

  • Не указывайте порт по умолчанию, как указано на шагах.

  • Если вы не создали виртуальный хост на самом сервере, где вы пытаетесь подключиться, создайте виртуальный хост и дайте ему разрешение администратора.

  • Установите виртуальный хост на factory перед созданием нового соединения, например factory.setVirtualHost( "VIRTUAL_HOST_NAME_ON_SERVER" );

  • Убедитесь, что имя пользователя на сервере, на котором вы пытаетесь подключиться, является администратором и имеет доступ к только что созданному виртуальному хосту.

  • Укажите свое имя пользователя и пароль вместе с виртуальным хостом при получении соединения.

  • Запустите приложение в режиме отладки и проверьте, проходит ли он сейчас, factory.newConection();

Это должно заставить ваши вещи работать. Получил то же исключение, и это сработало для меня.

Если он все еще не работает, вставьте фрагмент кода.

Ответ 3

Вы можете проверить, включена ли поддержка SSL/TLS. Затем используйте инструкцию useSslProtocol:

ConnectionFactory factory = new ConnectionFactory();
factory.useSslProtocol();