RabbitMQ Java客户端4.0.0重新连接失败

RabbitMQ Java客户端4.0.0重新连接失败,java,rabbitmq,Java,Rabbitmq,当我通过rabbitmq管理接口强制断开客户端连接时,它不会重新连接。我正在使用客户端4.0.0。请在下面找到我的代码 public void processQueue(){ // Establishing a Connection with RabbitMQ server, // running in the local machine, localhost ConnectionFactory factory = new ConnectionFactory();

当我通过rabbitmq管理接口强制断开客户端连接时,它不会重新连接。我正在使用客户端4.0.0。请在下面找到我的代码

public void processQueue(){
    // Establishing a Connection with RabbitMQ server, 
    // running in the local machine, localhost
    ConnectionFactory factory = new ConnectionFactory();
    Connection connection=null;
    try {
        factory.setHost("localhost");
        factory.setRequestedHeartbeat(5);
        factory.setAutomaticRecoveryEnabled(true);
        factory.setConnectionTimeout(5000);
        factory.setNetworkRecoveryInterval(10000);
        connection = factory.newConnection();

        // creating a channel with first_queue
        Channel channel = connection.createChannel();
        channel.queueDeclare("xyz", true, false, false, null);


        // creating the Consumer, that will be receive a message and convert to String
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                    byte[] body) throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("Java Queue - Message Received '" + message + "'");
            }
        };
        // loop that waits for message      
        channel.basicConsume("xyz", true, consumer);

    } catch (Exception e) {
        System.out.println("server is Down !");
        System.out.println(e.getMessage());
        try {
            if(connection!=null)
                connection.close();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }
}

我有一个简单的消费者程序,无法重新连接。我关注了这篇文章,但也没有帮助。有人能帮我吗?

我从rabbitmq用户邮件列表中获得了一些信息。希望这能帮助别人

连接恢复绝不依赖于队列的存在。 上记录了用于恢复的算法

什么是触发连接恢复的事件

  • I/O线程中的任何异常(这涉及网络连接问题)
  • 跳过对等心跳()
  • Server sent connection.close(CLI和管理UI中的连接关闭操作使用)
正如我前面提到的,后者是一个有争议的话题,因为这样你就不能强制关闭一个连接 一个流氓应用程序,而应用程序不会在恢复时放弃,这通常是不会的

什么不会触发连接恢复

  • 当您使用连接#close()或#abort()有意关闭它时
  • 通道异常-通道不是有意恢复的,因为它们的处理完全是特定于应用程序的
测试连接恢复的最简单方法是关闭节点,等待一段时间后重新启动。 您也可以使用iptables等,但您必须等待错过的心跳-有关更多详细信息,请参阅该指南

在Wireshark()、服务器日志中看到重新连接尝试应该很简单 或者-由于您使用的是4.0版本的客户端-客户端日志中至少应该有一些内容。 还有连接恢复生命周期侦听器:

我非常自信,3.6.6和4.0.0客户端中不存在容易解决的恢复问题。我们已经修复了一些已知的问题 3.6.6中的问题,与他们的记者确认了修复,可能在几个月内没有看到新问题的报道