当我通过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 Java client auto reconnect。任何人都可以帮我吗?
答案 0 :(得分:1)
我从rabbitmq-user邮件列表中获得了一些信息。希望这会对某人有所帮助。
连接恢复绝不取决于队列的存在。 用于恢复的算法记录在http://www.rabbitmq.com/api-guide.html。
什么会被视为触发连接恢复的事件?
正如我前面提到的,后者是一个有争议的话题,因为那时你不能强行关闭连接 一个流氓应用程序没有应用程序放弃恢复 - 这通常从来没有。
什么不会触发连接恢复?
测试连接恢复的最简单方法是关闭节点,等待一段时间并重新启动它。 您也可以使用iptables等,但是您必须等待错过的心跳 - 请参阅该指南以获取更多详细信息。
在Wireshark(https://www.rabbitmq.com/amqp-wireshark.html),服务器日志中看到重新连接尝试应该是微不足道的 或者 - 因为您使用的是客户端的4.0版本 - 客户端日志中至少应该有一些内容。 还有连接恢复生命周期监听器: https://github.com/rabbitmq/rabbitmq-java-client/pull/144
我非常有信心在3.6.6和4.0.0客户端中没有容易遇到的恢复问题。我们已经确定了一些已知的 3.6.6中的问题,确认了他们的记者的修复,并且可能在几个月内没有看到报告的新问题。