新版本 telnet 命令使用说明

dubbo 2.5.8 新版本增加了 QOS 模块,提供了新的 telnet 命令支持。

端口

新版本的 telnet 端口 与 dubbo 协议的端口是不同的端口,默认为 22222,可通过配置文件dubbo.properties 修改:

  1. dubbo.application.qos.port=33333

或者通过设置 JVM 参数:

  1. -Ddubbo.application.qos.port=33333

安全

默认情况下,dubbo 接收任何主机发起的命令,可通过配置文件dubbo.properties 修改:

  1. dubbo.application.qos.accept.foreign.ip=false

或者通过设置 JVM 参数:

  1. -Ddubbo.application.qos.accept.foreign.ip=false

拒绝远端主机发出的命令,只允许服务本机执行

telnet 与 http 协议

telnet 模块现在同时支持 http 协议和 telnet 协议,方便各种情况的使用

示例如下:

  1. ~ telnet localhost 22222
  2. Trying ::1...
  3. telnet: connect to address ::1: Connection refused
  4. Trying 127.0.0.1...
  5. Connected to localhost.
  6. Escape character is '^]'.
  7. ████████▄ ███ █▄ ▀█████████▄ ▀█████████▄ ▄██████▄
  8. ███ ▀███ ███ ███ ███ ███ ███ ███ ███ ███
  9. ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
  10. ███ ███ ███ ███ ▄███▄▄▄██▀ ▄███▄▄▄██▀ ███ ███
  11. ███ ███ ███ ███ ▀▀███▀▀▀██▄ ▀▀███▀▀▀██▄ ███ ███
  12. ███ ███ ███ ███ ███ ██▄ ███ ██▄ ███ ███
  13. ███ ▄███ ███ ███ ███ ███ ███ ███ ███ ███
  14. ████████▀ ████████▀ ▄█████████▀ ▄█████████▀ ▀██████▀
  15. dubbo>ls
  16. As Provider side:
  17. +----------------------------------+---+
  18. | Provider Service Name |PUB|
  19. +----------------------------------+---+
  20. |org.apache.dubbo.demo.DemoService| N |
  21. +----------------------------------+---+
  22. As Consumer side:
  23. +---------------------+---+
  24. |Consumer Service Name|NUM|
  25. +---------------------+---+
  26. dubbo>
  1. ~ curl "localhost:22222/ls?arg1=xxx&arg2=xxxx"
  2. As Provider side:
  3. +----------------------------------+---+
  4. | Provider Service Name |PUB|
  5. +----------------------------------+---+
  6. |org.apache.dubbo.demo.DemoService| N |
  7. +----------------------------------+---+
  8. As Consumer side:
  9. +---------------------+---+
  10. |Consumer Service Name|NUM|
  11. +---------------------+---+

支持的命令

ls 列出消费者和提供者

  1. dubbo>ls
  2. As Provider side:
  3. +----------------------------------+---+
  4. | Provider Service Name |PUB|
  5. +----------------------------------+---+
  6. |org.apache.dubbo.demo.DemoService| Y |
  7. +----------------------------------+---+
  8. As Consumer side:
  9. +---------------------+---+
  10. |Consumer Service Name|NUM|
  11. +---------------------+---+

列出 dubbo 的所提供的服务和消费的服务,以及消费的服务地址数

Online 上线服务命令

当使用延迟发布功能的时候(通过设置 org.apache.dubbo.config.AbstractServiceConfig#register 为 false),后续需要上线的时候,可通过 Online 命令

  1. //上线所有服务
  2. dubbo>online
  3. OK
  4. //根据正则,上线部分服务
  5. dubbo>online com.*
  6. OK

常见使用场景:

  • 当线上的 QPS 比较高的时候,当刚重启机器的时候,由于没有进行JIT 预热或相关资源没有预热,可能会导致大量超时,这个时候,可通过分批发布服务,逐渐加大流量
  • 当由于某台机器由于某种原因,需要下线服务,然后又需要重新上线服务

Offline 下线服务命令

由于故障等原因,需要临时下线服务保持现场,可以使用 Offline 下线命令。

  1. //下线所有服务
  2. dubbo>offline
  3. OK
  4. //根据正则,下线部分服务
  5. dubbo>offline com.*
  6. OK

help 命令

  1. //列出所有命令
  2. dubbo>help
  3. //列出单个命令的具体使用情况
  4. dubbo>help online
  5. +--------------+----------------------------------------------------------------------------------+
  6. | COMMAND NAME | online |
  7. +--------------+----------------------------------------------------------------------------------+
  8. | EXAMPLE | online dubbo |
  9. | | online xx.xx.xxx.service |
  10. +--------------+----------------------------------------------------------------------------------+
  11. dubbo>

相关参数说明

QoS提供了一些启动参数,来对启动进行配置,他们主要包括:

参数说明默认值
qosEnable是否启动QoStrue
qosPort启动QoS绑定的端口22222
qosAcceptForeignIp是否允许远程访问false

注意,从2.6.4/2.7.0开始,qosAcceptForeignIp默认配置改为false,如果qosAcceptForeignIp设置为true,有可能带来安全风险,请仔细评估后再打开。

QoS参数可以通过如下方式进行配置

  • 系统属性
  • dubbo.properties
  • XML方式
  • Spring-boot自动装配方式

其中,上述方式的优先顺序为系统属性 > dubbo.properties > XML/Spring-boot自动装配方式。

使用系统属性方式进行配置

  1. -Ddubbo.application.qos.enable=true
  2. -Ddubbo.application.qos.port=33333
  3. -Ddubbo.application.qos.accept.foreign.ip=false

使用dubbo.properties文件进行配置

在项目的src/main/resources目录下添加dubbo.properties文件,内容如下:

  1. dubbo.application.qos.enable=true
  2. dubbo.application.qos.port=33333
  3. dubbo.application.qos.accept.foreign.ip=false

使用XML方法进行配置

如果要通过XML配置响应的QoS相关的参数,可以进行如下配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  8. <dubbo:application name="demo-provider">
  9. <dubbo:parameter key="qos.enable" value="true"/>
  10. <dubbo:parameter key="qos.accept.foreign.ip" value="false"/>
  11. <dubbo:parameter key="qos.port" value="33333"/>
  12. </dubbo:application>
  13. <dubbo:registry address="multicast://224.5.6.7:1234"/>
  14. <dubbo:protocol name="dubbo" port="20880"/>
  15. <dubbo:service interface="org.apache.dubbo.demo.provider.DemoService" ref="demoService"/>
  16. <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
  17. </beans>

使用spring-boot自动装配方式配置

如果是spring-boot的应用,可以在application.properties或者application.yml上配置:

  1. dubbo.application.qosEnable=true
  2. dubbo.application.qosPort=33333
  3. dubbo.application.qosAcceptForeignIp=false