聊聊rocketmq的RemotingException

本文主要研究一下rocketmq的RemotingExceptionjava

RemotingException

org/apache/rocketmq/remoting/exception/RemotingException.javagit

public class RemotingException extends Exception {
    private static final long serialVersionUID = -5690687334570505110L;

    public RemotingException(String message) {
        super(message);
    }

    public RemotingException(String message, Throwable cause) {
        super(message, cause);
    }
}
  • 繼承自checked exception,底下有RemotingCommandException、RemotingConnectException、RemotingSendRequestException、RemotingTimeoutException、RemotingTooMuchRequestException

RemotingCommandException

org/apache/rocketmq/remoting/exception/RemotingCommandException.javagithub

public class RemotingCommandException extends RemotingException {
    private static final long serialVersionUID = -6061365915274953096L;

    public RemotingCommandException(String message) {
        super(message, null);
    }

    public RemotingCommandException(String message, Throwable cause) {
        super(message, cause);
    }
}
  • RemotingCommand解碼decodeCommandCustomHeader時可能拋出的異常

RemotingConnectException

org/apache/rocketmq/remoting/exception/RemotingConnectException.javaapache

public class RemotingConnectException extends RemotingException {
    private static final long serialVersionUID = -5565366231695911316L;

    public RemotingConnectException(String addr) {
        this(addr, null);
    }

    public RemotingConnectException(String addr, Throwable cause) {
        super("connect to <" + addr + "> failed", cause);
    }
}
  • NettyRemotingClient在channel出現問題的時候會拋出RemotingConnectException

RemotingSendRequestException

org/apache/rocketmq/remoting/exception/RemotingSendRequestException.javathis

public class RemotingSendRequestException extends RemotingException {
    private static final long serialVersionUID = 5391285827332471674L;

    public RemotingSendRequestException(String addr) {
        this(addr, null);
    }

    public RemotingSendRequestException(String addr, Throwable cause) {
        super("send request to <" + addr + "> failed", cause);
    }
}
  • NettyRemotingClient在發送請求失敗的時候,會拋出RemotingSendRequestException

RemotingTimeoutException

org/apache/rocketmq/remoting/exception/RemotingTimeoutException.javacode

public class RemotingTimeoutException extends RemotingException {

    private static final long serialVersionUID = 4106899185095245979L;

    public RemotingTimeoutException(String message) {
        super(message);
    }

    public RemotingTimeoutException(String addr, long timeoutMillis) {
        this(addr, timeoutMillis, null);
    }

    public RemotingTimeoutException(String addr, long timeoutMillis, Throwable cause) {
        super("wait response on the channel <" + addr + "> timeout, " + timeoutMillis + "(ms)", cause);
    }
}
  • NettyRemotingClient在發送請求時,若是返回回來的RemotingCommand爲null,可是發送請求成功,則拋出RemotingTimeoutException

RemotingTooMuchRequestException

org/apache/rocketmq/remoting/exception/RemotingTooMuchRequestException.java繼承

public class RemotingTooMuchRequestException extends RemotingException {
    private static final long serialVersionUID = 4326919581254519654L;

    public RemotingTooMuchRequestException(String message) {
        super(message);
    }
}
  • NettyRemotingAbstract在執行請求以前要進行流控,若是獲取不到信號量,則區分是不是超時,若是是無timeout獲取信號量也沒獲取到,則表示RemotingTooMuchRequestException

小結

rocketmq的remoting模塊的異常採用的是checked exception,定義了根異常RemotingException,底下有幾個異常分別爲RemotingCommandException、RemotingConnectException、RemotingSendRequestException、RemotingTimeoutException、RemotingTooMuchRequestException。rem

doc

相關文章
相關標籤/搜索