由于SocketException,RabbitMQ新连接被拒绝
在尝试创建与另一台服务器上运行的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
命令PID用户FD类型设备大小/关闭节点名称
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
可能的原因之一是您与RabbitMQ连接的用户无权访问虚拟主机。
您可以使用Management Plugin(Admin选项卡)进行检查。
-
不要像步骤中提到的那样指定默认端口。
-
如果您尚未在尝试连接的实际服务器上创建虚拟主机,请创建虚拟主机并为其提供管理员权限。
-
在创建新连接之前在工厂设置虚拟主机,例如factory.setVirtualHost(“VIRTUAL_HOST_NAME_ON_SERVER”);
-
确保您尝试连接的服务器上的用户名是Admin,并且可以访问刚刚创建的虚拟主机。
-
获取连接时,请指定您的用户名和密码以及虚拟主机。
-
在调试模式下启动应用程序,并检查它现在是否通过,factory.newConection();
这应该让你的事情发挥作用。 得到了同样的例外,它对我有用。
如果它仍然无效,请粘贴您的代码段。
您可以检查是否启用了SSL / TLS支持。 然后使用指令useSslProtocol:
ConnectionFactory factory = new ConnectionFactory(); factory.useSslProtocol();