RabbitMQ连接重置

7
我正在尝试使用Java代码将简单的RabbitMQ连接到正在执行RabbitMQ服务的服务器。 执行以下代码(源代码)时,我遇到了java.net.SocketException : Connection Reset异常。
import java.io.*;
import java.security.*;


import com.rabbitmq.client.*;

public class test
{
    public static void main(String[] args) throws Exception
    {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("myIP");  //myIP is just dummy text, I have a real IP there
        factory.setPort(5672);
        factory.setUsername("admin");
        factory.setPassword("sesgo");
        factory.setVirtualHost("vSESGO");

        factory.useSslProtocol();

        Connection conn = factory.newConnection();
        Channel channel = conn.createChannel();

        channel.queueDeclare("rabbitmq-java-test", false, true, true, null);
        channel.basicPublish("", "rabbitmq-java-test", null, "Hello, World".getBytes());


        GetResponse chResponse = channel.basicGet("rabbitmq-java-test", false);
        if(chResponse == null) {
            System.out.println("No message retrieved");
        } else {
            byte[] body = chResponse.getBody();
            System.out.println("Recieved: " + new String(body));
        }


        channel.close();
        conn.close();
    }
}

我在网上寻找答案并已经尝试过以下方法:

  1. 验证服务器是否打开了我连接的端口。
  2. 验证客户端没有通过防火墙等方式阻止我的连接。
  3. 在RabbitMQ上创建一个新的虚拟主机并授予权限。
  4. 验证iptables在服务器端是否阻止了我的连接。

似乎没有任何作用,有什么想法吗?

完整的堆栈跟踪信息如下:

This trust manager trusts every certificate, effectively disabling peer verification. This is convenient for local development but prone to man-in-the-middle attacks. Please see http://www.rabbitmq.com/ssl.html#validating-cerficates to learn more about peer certificate validation.
Exception in thread "main" java.net.SocketException: Connection reset
 at java.net.SocketInputStream.read(Unknown Source)
 at java.net.SocketInputStream.read(Unknown Source)
 at sun.security.ssl.InputRecord.readFully(Unknown Source)
 at sun.security.ssl.InputRecord.read(Unknown Source)
 at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
 at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
 at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
 at sun.security.ssl.AppOutputStream.write(Unknown Source)
 at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
 at java.io.BufferedOutputStream.flush(Unknown Source)
 at java.io.DataOutputStream.flush(Unknown Source)
 at com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:147)
 at com.rabbitmq.client.impl.SocketFrameHandler.sendHeader(SocketFrameHandler.java:153)
 at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:294)
 at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:63)
 at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(AutorecoveringConnection.java:99)
 at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:921)
 at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:880)
 at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:838)
 at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:990)
 at test.main(test.java:25)

给出完整的堆栈跟踪错误。 - Tryliom
当您创建连接时,是在此处出现错误还是在创建通道时? - Tryliom
根据调试器,导致错误的那一行是创建连接的那一行: Connection conn = factory.newConnection(); - DoctorMckay
我在那里写了“myIp”,因为我在我的代码中有我的服务器真实的IP。 - DoctorMckay
1
你能访问RabbitMQ服务器吗?如果可以的话,你能检索日志吗——确保你有一个连接到交换amq.rabbitmq.log的队列,绑定“#”以获取所有的日志消息。 - Olivier
显示剩余4条评论
3个回答

1
我在这里遇到了相同的问题: RabbitMQ连接重置异常。对于Windows的解决方案是在兔子配置文件中为证书和密钥路径添加反斜杠。

0

我遇到了完全相同的错误,问题出在rabbitmq.conf文件中。我尝试使用JKS文件来设置以下SSL选项,但生成自己的自签名.pem文件有助于解决此问题。我相当仔细地按照这个指南https://www.codetd.com/en/article/12031242进行操作。

ssl_options.cacertfile = /etc/rabbitmq/ca_certificate.pem
ssl_options.certfile   = /etc/rabbitmq/server_certificate.pem
ssl_options.keyfile    = /etc/rabbitmq/server_key.pem

0

我不知道这是否适用于您的情况,但我最近在测试RabbitMQ 3.8.3时解决了类似的情况,原因是我引用的密钥受到密码保护,但我未能在RabbitMQ配置中提供密码,就像这样:

ssl_options.password = password

不幸的是,即使将日志级别设置为调试模式,RabbitMQ 日志中也完全没有关于此问题的任何信息。通过各种客户端进行测试时,可以建立连接,但 RabbitMQ 立即发送了连接重置信号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接