扩展Dubbo TelnetHandler或重写默认invoke实现

Dubbo的很多扩展都是通过其SPI机制来完成的,可以在服务启动时,使用自定义的实现来达到某些功能,这里不做SPI的介绍,需要查看可移步官网http://dubbo.apache.org/zh-cn/docs/source_code_guide/dubbo-spi.html进行查看。

TelnetHandler(注意:2.7.0和之前版本的包名有所变化)主要用于客户端通过telnet 命令连接至dubbo服务后命令的具体实现,telnet后的很多命令,官网都有其默认的TelnetHandler实现,例如:

扩展Dubbo TelnetHandler或重写默认invoke实现_第1张图片

 

如果要自己扩展新的命令,首先实现TelnetHandler接口,并在想项目的resources目录下新建META-INF/dubbo目录,然后新建一个名为org.apache.dubbo.remoting.telnet.TelnetHandler的文本文件,这个时2.7.0+版本的文件名,2.5.x,2.6.x的版本文件名则为com.alibaba.dubbo.remoting.telnet.TelnetHandler,假设新命令为test则,文件内容为test=com.xxx.XXXTelnetHandler,保存后,还须配置dubbo:provider,如,至此启动服务,telnet连接后,即可用test命令进行测试,便可进入XXXTelnetHandler中的telnet方法。

如果要重写默认的一些命令该如何做呢?比如invoke?如果把上文中配置的test改为invoke是否就可以了呢?答案是不可以!!!

要想重写invoke或其他命令的默认实现,除了修改test为invoke外,还需将com.alibaba.dubbo.remoting.telnet.TelnetHandler的文件文件的配置放置在META-INF/dubbo/internal目录下,这样才会重写生效,关于这个重写不生效的问题,自己琢磨了两三个小时,后面看源码的配置发现是在META-INF/dubbo/internal目录下,抱着试一试的态度,自己的目录也加了internal后,实现了默认命令的重写。

你可能感兴趣的:(中间件,Dubbo)