聊聊dubbo的CommandExecutor

本文主要研究一下dubbo的CommandExecutorjava

CommandExecutor

dubbo-2.7.2/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/CommandExecutor.javagit

public interface CommandExecutor {
    /**
     * Execute one command and return the execution result
     *
     * @param commandContext command context
     * @return command execution result
     * @throws NoSuchCommandException
     */
    String execute(CommandContext commandContext) throws NoSuchCommandException;
}
  • CommandExecutor定義了execute方法,其方法傳入CommandContext參數

CommandContext

dubbo-2.7.2/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/CommandContext.javagithub

public class CommandContext {

    private String commandName;
    private String[] args;
    private Channel remote;
    private boolean isHttp;
    private Object originRequest;

    public CommandContext(String commandName) {
        this.commandName = commandName;
    }

    public CommandContext(String commandName, String[] args, boolean isHttp) {
        this.commandName = commandName;
        this.args = args;
        this.isHttp = isHttp;
    }

    public String getCommandName() {
        return commandName;
    }

    public void setCommandName(String commandName) {
        this.commandName = commandName;
    }

    public String[] getArgs() {
        return args;
    }

    public void setArgs(String[] args) {
        this.args = args;
    }

    public Channel getRemote() {
        return remote;
    }

    public void setRemote(Channel remote) {
        this.remote = remote;
    }

    public boolean isHttp() {
        return isHttp;
    }

    public void setHttp(boolean http) {
        isHttp = http;
    }

    public Object getOriginRequest() {
        return originRequest;
    }

    public void setOriginRequest(Object originRequest) {
        this.originRequest = originRequest;
    }
}
  • CommandContext定義了commandName、args、remote、isHttp、originRequest參數

DefaultCommandExecutor

dubbo-2.7.2/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/DefaultCommandExecutor.javaapache

public class DefaultCommandExecutor implements CommandExecutor {
    @Override
    public String execute(CommandContext commandContext) throws NoSuchCommandException {
        BaseCommand command = null;
        try {
            command = ExtensionLoader.getExtensionLoader(BaseCommand.class).getExtension(commandContext.getCommandName());
        } catch (Throwable throwable) {
                //can't find command
        }
        if (command == null) {
            throw new NoSuchCommandException(commandContext.getCommandName());
        }
        return command.execute(commandContext, commandContext.getArgs());
    }
}
  • DefaultCommandExecutor實現了CommandExecutor接口,其execute方法會根據commandName經過ExtensionLoader來加載對應的comamnd,而後執行command的execute方法

小結

CommandExecutor定義了execute方法,其方法傳入CommandContext參數;CommandContext定義了commandName、args、remote、isHttp、originRequest參數;DefaultCommandExecutor實現了CommandExecutor接口,其execute方法會根據commandName經過ExtensionLoader來加載對應的comamnd,而後執行command的execute方法ide

doc

相關文章
相關標籤/搜索