java - RabbitMQ - 我如何捕获 ForgivingExceptionHandler?

标签 java intellij-idea rabbitmq

我正在 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/

相关文章:

rabbitmq - RabbitMQ/AMQP 中的消息版本控制?

python - "Error: Failed to initialize erlang distribution:"试图运行 "rabbitmqctl status"

java - 如何使用 GSON 序列化和反序列化包含 HashMap 和 Pairs 的对象

java - 如何使用 Selenium WebDriver 处理动态文本(成功和失败文本)

maven - Sling 部署内容并使用 Maven 进行捆绑

JavaFX 预加载器配置 IntelliJ IDEA(Java 9 及更高版本)

java - 访问包含带有 jar 的文件夹的存储库

java - 多态性和静态方法

python - 禁用 Pycharm 打印自动完成

python - rabbitmq中的correlation_id