【问题标题】:RabbitMQ new connection refused due to SocketException由于 SocketException,RabbitMQ 新连接被拒绝
【发布时间】:2014-05-15 03:43:47
【问题描述】:

在尝试创建与在不同服务器上运行的 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

列出连接... 来宾 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 版本?
  • rabbitmq 版本:3.0.4 并且服务器在 centos 机器上运行。
  • 1.它在本地主机中工作吗?可能是防火墙问题。 2.尝试在服务器上执行rabbitmqctl list_connections,可能打开的连接太多。
  • 是的,它适用于 localhost 。我尝试了一个简单的生产者-消费者程序。我还执行了rabbitmqctl list_connections 命令并在列表中只得到了两个端口,而rabbitmqctl list-queues 命令目前只列出了两个队列。我重新启动了rabbitmq 服务器并重新尝试,但没有结果。防火墙不是问题。我已验证。我可能遗漏的任何其他瓶颈?提前致谢。
  • 我认为是tcp socket问题!您是否尝试从客户端 telnet your_server 5672

标签: java connection rabbitmq amqp


【解决方案1】:

其中一个可能的原因是您连接到 RabbitMQ 的用户无权访问虚拟主机。

您可以使用管理插件(管理选项卡)进行检查。

【讨论】:

    【解决方案2】:
    • 不要像您在步骤中提到的那样指定默认端口。

    • 如果您尚未在尝试连接的实际服务器上创建虚拟主机,请创建虚拟主机并授予其管理员权限。

    • 在创建新连接之前在工厂设置虚拟主机,如 factory.setVirtualHost("VIRTUAL_HOST_NAME_ON_SERVER");

    • 确保您尝试连接的服务器上的用户名是 Admin,并且可以访问您刚刚创建的虚拟主机。

    • 在获取连接时指定您的用户名和密码以及虚拟主机。

    • 在调试模式下启动您的应用程序,并检查它现在是否通过, factory.newConection();

    这应该使您的工作正常。 遇到了同样的异常,它对我有用。

    如果仍然无法使用,请粘贴您的代码 sn-p。

    【讨论】:

      【解决方案3】:

      您可以检查是否启用了 SSL/TLS 支持。然后使用指令 useSslProtocol :

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

      【讨论】:

        【解决方案4】:

        检查主机和端口值

        在 application.properties 中

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

        查看 RabbitMQ 站点在端口 15672 上运行,而代码中使用 amqp 协议。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-13
          • 1970-01-01
          • 2018-12-15
          • 1970-01-01
          相关资源
          最近更新 更多