dubbo源码分析6-telnet方式的管理实现
dubbo源码分析1-reference bean创建
dubbo源码分析2-reference bean发起服务方法调用
dubbo源码分析3-service bean的创建与发布
dubbo源码分析4-基于netty的dubbo协议的server
dubbo源码分析5-dubbo的扩展点机制
dubbo提供了telnet的方式,直接用命令查看服务信息等。怎么实现的呢。
1. 编解码器
com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter.InternalDecoder
实现了SimpleChannelUpstreamHandler类
然后注册给ChannelPipeline
后面的都是用netty的套路
2. dubbo中URL类
com.alibaba.dubbo.common.URL
该类的作用类似于我们通常用的上下文,它描述了调用过程中一些配置信息,形式如下:
比如我需要怎样的编解码器,我会到这url中取
com.alibaba.dubbo.remoting.transport.AbstractEndpoint.AbstractEndpoint(URL, ChannelHandler)
this.codec = ExtensionLoader.getExtensionLoader(Codec.class).getExtension(url.getParameter(Constants.CODEC_KEY, "telnet"));
我们在上述的url示例中能找到 codec=dubbo
所以就知道这次采用dubbo的编解码器。
略微和我们之前用上下文方式不同的是,上下文中可以防止一些比较复杂的对象,比如放置一个根窗体容器之类的。
用了URL这种形式,结合ZooKeeper使用比较方便。
3. dubbo的扩展点实现
分析 com.alibaba.dubbo.common.extension.ExtensionLoader<T>
本质上还是将构建出来的实例放在cachedInstances属性中,这个事本来可以交给spring干,spring专业干IOC的。但是dubbo这么干了之后一个明显的好处是:dubbo在不依赖任何第三方框架的情况下可以跑起来。说的简单一点:dubbo自己做了一个简易的IOC机制,它这里面称之为SPI。自己做IOC的框架真是不少,Struts2也自己干了IOC。详细分析见之前画的一份思维导图
4. telnet协议编解码器
DubboCountCodec与netty对接,DubboCountCodec 关联了DubboCodec。DubboCodec继承体系上有个TelnetCodec。TelnetCodec完成了telenet协议的编解码,在decode方法中会将InputStream 实例转换成message。
5. 解码后的动作链路
NettyHandler extends SimpleChannelHandler 这个类会注册给netty,netty在解码后会触发下面的messageReceived逻辑。
com.alibaba.dubbo.remoting.transport.netty.NettyHandler.messageReceived(ChannelHandlerContext, MessageEvent)
这个handler又关联了真正处理逻辑的handler,com.alibaba.dubbo.remoting.telnet.support.TelnetHandlerAdapter
TelnetHandlerAdapter触发telnet方法 调用真正的命令处理逻辑
根据拿到的命令 再通过扩展点机制获取具体的命令实现类的实例。
可以以com.alibaba.dubbo.rpc.protocol.dubbo.telnet.ListTelnetHandler为例子分析一下。
命令的实现使用了@Help注解,描述了命令的帮助。
6. telnet连接后,按向上或者向下方向键的时候能回显历史命令,怎么实现的
实现在com.alibaba.dubbo.remoting.telnet.codec.TelnetCodec.decode(Channel, InputStream, int, byte[])中,编解码器会将历史命令记录在channel中,然后根据方向来获取。
boolean down = endsWith(message, DOWN);
if (up || down) {
LinkedList<String> history = (LinkedList<String>) channel.getAttribute(HISTORY_LIST_KEY);
if (history == null || history.size() == 0) {
return NEED_MORE_INPUT;
}
7. 部分问题
dubbo的这个telnet管理台实现还是比较简陋的 只实现了telnet的行模式
并没有实现字符模式,这样的话 按tab补全这种事就不好做了。
之前看过huawei的命令行管理平台的工具,tab补全能力非常强大 也非常好用。
--EOF--
dubbo源码分析6-telnet方式的管理实现的更多相关文章
- Dubbo 源码分析 - 服务调用过程
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...
- dubbo源码分析1-reference bean创建
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...
- dubbo源码分析2-reference bean发起服务方法调用
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...
- dubbo源码分析3-service bean的创建与发布
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...
- dubbo源码分析4-基于netty的dubbo协议的server
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...
- dubbo源码分析5-dubbo的扩展点机制
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...
- dubbo源码分析一:整体分析
本文作为dubbo源码分析的第一章,先从总体上来分析一下dubbo的代码架构.功能及优缺点,注意,本文只分析说明开源版本提供的代码及功能. 1.dubbo的代码架构: spring适配层:常规的sp ...
- Dubbo 源码分析 - 集群容错之 LoadBalance
1.简介 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载"均摊"到不同的机器上.避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况.通 ...
- Dubbo 源码分析 - 集群容错之 Cluster
1.简介 为了避免单点故障,现在的应用至少会部署在两台服务器上.对于一些负载比较高的服务,会部署更多台服务器.这样,同一环境下的服务提供者数量会大于1.对于服务消费者来说,同一环境下出现了多个服务提供 ...
随机推荐
- redis数据类型之—String
(1)String 简单介绍 string是redis中最基本的数据类型,一个字符串类型的值存储的最大容量是1GB. (2)String 常用命令
- iOS searchbar textfield placeholder color
// Get the instance of the UITextField of the search bar UITextField *searchField = [searchBar value ...
- 基础DOS命令
DOS命令: 1. 切换盘符:d: 2. 查看文件目录清单: dir dir/s 查看所有目录及子目录下的所有内容 dir/p 分屏显示 dir/s/p 分屏显示所有内容 提前结束:ctr ...
- About_PHP_文件的上传
在form表单中,我们上传文件用的是:<input type="file" name="fileUpload" />,当然,光是这样是不行的. 我们 ...
- <三>JDBC_面向对象思想的体现
JDBCTools.java import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;i ...
- 日志分析_使用shell完整日志分析案例
一.需求分析 1. 日志文件每天生成一份(需要将日志文件定时上传至hdfs) 2. 分析日志文件中包含的字段:访问IP,访问时间,访问URL,访问状态,访问流量 3. 现在有"昨日" ...
- VMware与virtualbox安装centos7连接网络不可达问题解决笔记(连接网络)
我最初是安装vmware遇到访问不到网络,按网上的配置方法都不能解决.然后我感觉可能跟系统有关,我装的是centos,然后我试着在virtualbox上安装看遇到什么问题. 用virtualbox安装 ...
- phpexcel引入MVC框架会导致__autoload引入类文件失败的解决办法
Autoloader.php 的register和load方法 register方法 if (function_exists('__autoload')) { // Register any exis ...
- Ubuntu apt-get "Hash Sum mismatch" 问题解决方法
参考:ubuntu: apt-get update的时候遇到"Hash Sum mismatch"错误 在安装Mininet的时候,apt-get update的时候遇到了这个问题 ...
- Autofac
程序集准备 Assembly: Autofac/Autofac.Integration.Mvc/System.Web.Mvc/System.Web.Helpers/System.Web.WebPage ...