QOS 概述

新版本 dubbo 2.5.8 新增 QoS 模块,并提供新的 telnet 命令支持。

QoS 提供了一些启动参数来配置启动,它们主要包括

参数描述默认值
qos-enable是否启用 QoStrue
qos-port启用 QoS 绑定端口22222
qos-accept-foreign-ip是否允许远程访问false
qos-accept-foreign-ip-whitelist支持的远程主机 IP 地址(段)(无)
qos-anonymous-access-permission-level支持的匿名访问权限级别PUBLIC(1)

注意,从 2.6.4/2.7.0 版本开始,qos-accept-foreign-ip 的默认配置改为 false。如果将 qos-accept-foreign-ip 设置为 true,可能会带来安全风险,请谨慎评估后再打开。

QoS 参数配置

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

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

端口

新版本 telnet 的端口与 dubbo 协议的端口不同,默认为 `22222`

可以通过配置文件 `dubbo.properties` 进行修改

dubbo.application.qos-port=33333

或者可以设置 JVM 参数

-Ddubbo.application.qos-port=33333

安全

默认情况下,dubbo 接受任何主机发起的命令

可以通过配置文件 `dubbo.properties` 进行修改

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

或者

可以设置 JVM 参数

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

拒绝远程主机发出的命令,只允许服务在本地执行。

同时,可以通过设置 `qos-accept-foreign-ip-whitelist` 来指定支持的远程主机 IP 地址(段),多个 IP 地址(段)之间用**逗号**隔开,例如

配置文件 `dubbo.properties`

dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24

设置 JVM 参数

-Ddubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13,132.12.10.13/24

权限

为了默认支持生命周期探测,QoS 提供了匿名访问和设置权限级别的能力。当前支持的权限级别有

  • PUBLIC(1) 默认情况下,支持匿名访问的命令权限级别。目前只支持与生命周期探测相关的命令。
  • PROTECTED(2) 命令默认权限级别
  • PRIVATE(3) 保留的最高权限级别,目前不支持
  • NONE 最低权限级别,即不支持匿名访问

权限级别 `PRIVATE`> `PROTECTED`> `PUBLIC`> `NONE`,高权限可以访问同级和低权限的命令。目前以下命令的权限为 `PUBLIC`,其他命令的默认权限为 `PROTECTED`。

命令权限级别
在线PUBLIC (1)
启动PUBLIC (1)
就绪PUBLIC (1)
退出PUBLIC (1)

默认情况下,dubbo 允许匿名主机发起匿名访问,只能执行 `PUBLIC` 权限级别的命令,其他更高权限的命令将被拒绝。

**关闭匿名访问** 可以通过设置 `qos-anonymous-access-permission-level=NONE` 来关闭匿名访问。

**设置权限级别** 可以通过配置文件 `dubbo.properties` 进行修改

dubbo.application.qos-anonymous-access-permission-level=PROTECTED

或者
可以设置 JVM 参数

-Ddubbo.application.qos-anonymous-access-permission-level=PROTECTED

以允许匿名访问更高权限级别的命令。

协议

telnet 和 http 协议

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

➜ ~ telnet localhost 22222
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
  ████████▄ ███ █▄ ▀█████████▄ ▀█████████▄ ▄██████▄
  ███ ▀███ ███ ███ ███ ███ ███ ███ ███ ███
  ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
  ███ ███ ███ ███ ▄███▄▄▄██▀ ▄███▄▄▄██▀ ███ ███
  ███ ███ ███ ███ ▀▀███▀▀▀██▄ ▀▀███▀▀▀██▄ ███ ███
  ███ ███ ███ ███ ███ ██▄ ███ ██▄ ███ ███
  ███ ▄███ ███ ███ ███ ███ ███ ███ ███ ███
  ████████▀ ████████▀ ▄█████████▀ ▄█████████▀ ▀██████▀


dubbo>ls
As Provider side:
+----------------------------------+---+
| Provider Service Name |PUB|
+----------------------------------+---+
|org.apache.dubbo.demo.DemoService|N|
+----------------------------------+---+
As Consumer side:
+---------------------+---+
|Consumer Service Name|NUM|
+---------------------+---+

dubbo>
➜ ~ curl "localhost:22222/ls?arg1=xxx&arg2=xxxx"
As Provider side:
+----------------------------------+---+
| Provider Service Name |PUB|
+----------------------------------+---+
|org.apache.dubbo.demo.DemoService|N|
+----------------------------------+---+
As Consumer side:
+---------------------+---+
|Consumer Service Name|NUM|
+---------------------+---+

使用配置

使用系统属性配置

-Ddubbo.application.qos-enable=true
-Ddubbo.application.qos-port=33333
-Ddubbo.application.qos-accept-foreign-ip=false
-Ddubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13,132.12.10.13/24
-Ddubbo.application.qos-anonymous-access-permission-level=PUBLIC

使用 dubbo.properties 文件配置

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

dubbo.application.qos-enable=true
dubbo.application.qos-port=33333
dubbo.application.qos-accept-foreign-ip=false
dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
dubbo.application.qos-anonymous-access-permission-level=PUBLIC

使用 XML 方法配置

如果想通过 XML 配置响应的 QoS 相关参数,可以如下配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="https://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       https://dubbo.apache.org/schema/dubbo https://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  <dubbo:application name="demo-provider">
    <dubbo:parameter key="qos-enable" value="true"/>
    <dubbo:parameter key="qos-accept-foreign-ip" value="false"/>
    <dubbo:parameter key="qos-accept-foreign-ip-whitelist" value="123.12.10.13,132.12.10.13/24"/>
    <dubbo:parameter key="qos-anonymous-access-permission-level" value="NONE"/>
    <dubbo:parameter key="qos-port" value="33333"/>
  </dubbo:application>
  <dubbo:registry address="multicast://224.5.6.7:1234"/>
  <dubbo:protocol name="dubbo" port="20880"/>
  <dubbo:service interface="org.apache.dubbo.demo.provider.DemoService" ref="demoService"/>
  <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
</beans>

使用 spring-boot 自动装配配置

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

dubbo.application.qos-enable=true
dubbo.application.qos-port=33333
dubbo.application.qos-accept-foreign-ip=false
dubbo.application.qos-accept-foreign-ip-whitelist=123.12.10.13, 132.12.10.13/24
dubbo.application.qos-anonymous-access-permission-level=NONE

上次修改时间:2023 年 1 月 2 日:增强英文文档 (#1798) (95a9f4f6c1c)