专栏首页码匠的流水账聊聊dubbo的CommandExecutor
原创

聊聊dubbo的CommandExecutor

本文主要研究一下dubbo的CommandExecutor

CommandExecutor

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

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.java

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.java

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方法

doc

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java性能调优:利用JMC进行性能分析

    JMC, 即Java任务控制(Java Mission Control)是从Java7(7u40)和 Java8 的商业版本包括一项新的监控和控制特性。

    朝雨忆轻尘
  • Java性能调优:利用VisualVM进行性能分析

    VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对...

    朝雨忆轻尘
  • 『互联网架构』软件架构-Spring boot快速开始及核心功能介绍(中)(85)

    【注意:执行jar的jdk版本需要与jar打包编译的版本一致。如果配置了环境变量,直接使用java命令打包即可】

    IT故事会
  • Java SPI机制和使用示例

    SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface。根据 Java 的 SPI 规范,我们可以定义一个服...

    朝雨忆轻尘
  • 再谈Token认证,如何快速方便获取用户信息

    前面我写了一篇《Token认证,如何快速方便获取用户信息》的文章,引起了各位读者的积极参与,除了文章中我提出的三种方式,各位读者大佬们也贡献了其他多种实现方式。

    猿天地
  • Vue + Element UI 实现权限管理系统 前端篇(十五):嵌套外部网页

    在有些时候,我们需要在我们的内容栏主区域显示外部网页。如查看服务端提供的SQL监控页面,接口文档页面等。

    朝雨忆轻尘
  • Handler中的内存泄露究竟是怎么回事?

    代码很简单,只是创建一个mHandler变量,并在onCreate中发送一个延迟消息。

    Android架构
  • 三条有效的实战经验助你成为移动互联架构师!

    架构师的职责应该是立足于技术和业务之间的中间角色或者平衡点, 在针对业务深刻理解的基础上,针对业务中存在诸多变数,挑选适合的技术架构和技术方案。

    Android架构
  • Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十四):权限控制(Shiro 注解)

    当前,我们基于导航菜单的显示和操作按钮的禁用状态,实现了页面可见性和操作可用性的权限验证,或者叫访问控制。但这仅限于页面的显示和操作,我们的后台接口还是没有进行...

    朝雨忆轻尘
  • 结合案例深入解析适配器模式(一)

    将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

    李红

扫码关注云+社区

领取腾讯云代金券