我正在 try catch /覆盖所有意外错误,例如rabbitmq中的错误连接。我已经尝试了所有我认为相关的异常(Exception,IOException,SocketException),甚至一般异常本身(所有这些都没有捕获错误),所以我可以更喜欢其他流程,也许作为示例:使用第三方进行日志提交系统,或通过电子邮件通知管理员,同时维护代码重新连接 3 次以上,而不是显示此错误消息并停止所有执行。
这是 Uncaught Error 消息:
16:27:51.476 [AMQP Connection 192.168.7.167:5672] ERROR com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connection driver error occured
java.net.SocketException: Socket Closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288)
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91)
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:184)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:598)
at java.lang.Thread.run(Thread.java:748)
这是我的代码:
package TestPackage;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.ConnectionFactory;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;
import java.util.Properties;
import java.util.concurrent.TimeoutException;
public class TestQueueSend {
static ConnectionFactory rbmqFactory;
static Connection rbmqConn;
static Channel rbmqChannel;
public static void main(String[] args){
Properties rabbitMQConf = new Properties();
try {
rabbitMQConf.load(new FileInputStream("./config/rabbitmqconf.properties"));
} catch (IOException errorLoadRabbitMQConfig) {
errorLoadRabbitMQConfig.getStackTrace();
}
rbmqFactory = new ConnectionFactory();
rbmqFactory.setUsername(rabbitMQConf.getProperty("rabbit_mq_username"));
rbmqFactory.setPassword(rabbitMQConf.getProperty("rabbit_mq_password"));
rbmqFactory.setVirtualHost(rabbitMQConf.getProperty("rabbit_mq_virtualHost"));
rbmqFactory.setHost(rabbitMQConf.getProperty("rabbit_mq_host"));
rbmqFactory.setPort(Integer.parseInt(rabbitMQConf.getProperty("rabbit_mq_port")));
System.out.println("Running RabbitMQConnection!");
try {
System.out.println("Connection START : " + rabbitMQConf.getProperty("rabbit_mq_host"));
rbmqConn = rbmqFactory.newConnection();
System.out.println("Create Channel");
rbmqChannel = rbmqConn.createChannel();
String queueName = "queueTest";
String queueContent = "Kasur ini rusak";
System.out.println("Queue Declare");
rbmqChannel.queueDeclare(queueName,false,false,false,null);
rbmqChannel.basicPublish("",queueName,null,queueContent.getBytes());
System.out.println(" [x] Sent '" + queueContent + "'");
rbmqChannel.close();
rbmqConn.close();
} catch(SocketException errorSocketCatch) {
System.out.println("ERROR_SOCKET");
System.out.println(errorSocketCatch.getMessage());
} catch(IOException errorIOCatch) {
System.out.println("ERROR_IO");
System.out.println(errorIOCatch.getMessage());
} catch (TimeoutException errorTimeoutCatch) {
System.out.println("ERROR_TIMEOUT");
System.out.println(errorTimeoutCatch.getMessage());
} catch (Exception errorGeneric) {
System.out.println("ERROR_GENERIC");
System.out.println(errorGeneric.getMessage());
}
}
}
有关其他信息,这就是我使用的:
Maven 3.3
com rabbitmq amqp client 5.7.2 (5.7.1 not work too)
org slf4j slf4j api 1.7.26
ch qos logback classic:1.2.3
对于我正在使用的IDE:
IntelliJ IDEA 2019.1.3 (Community Edition)
Build #IC-191.7479.19, built on May 28, 2019
JRE: 1.8.0_202-release-1483-b58 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
最佳答案
由于参数使用不正确,我出现了此错误: 虚拟主机:/ABC而不是虚拟主机:ABC
关于java - RabbitMQ - 我如何捕获 ForgivingExceptionHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57180414/