This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 65fbbff5a2 Update routing-rule.md (#1883)
65fbbff5a2 is described below

commit 65fbbff5a24f3285c1adf705c616d832309ee136
Author: mfordjody <[email protected]>
AuthorDate: Thu Jan 19 20:38:39 2023 +0800

    Update routing-rule.md (#1883)
---
 .../traffic/routing-rule.md                        | 171 +++++++++------------
 1 file changed, 76 insertions(+), 95 deletions(-)

diff --git 
a/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule.md
 
b/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule.md
index fc5d244360..b313f92fb0 100644
--- 
a/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule.md
+++ 
b/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/traffic/routing-rule.md
@@ -5,21 +5,15 @@ linkTitle: "路由规则"
 weight: 33
 description: "通过 Dubbo 中的路由规则做服务治理"
 ---
-
+## 路由规则概述
 路由规则在发起一次RPC调用前起到过滤目标服务器地址的作用,过滤后的地址列表,将作为消费端最终发起RPC调用的备选地址。
 
+您可以随时在服务治理控制台 [Dubbo-Admin](https://github.com/apache/dubbo-admin) 写入路由规则。
+
 - 条件路由。支持以服务或 Consumer 应用为粒度配置路由规则。
 - 标签路由。以 Provider 应用为粒度配置路由规则。
 
-后续我们计划在 2.6.x 版本的基础上继续增强脚本路由功能。
-
-## 条件路由
-
-您可以随时在服务治理控制台 [Dubbo-Admin](https://github.com/apache/dubbo-admin) 写入路由规则
-
-### 简介
-
-- 应用粒度
+### 应用粒度
 
   ```yaml
   # app1的消费者只能消费所有端口为20880的服务实例
@@ -36,7 +30,7 @@ description: "通过 Dubbo 中的路由规则做服务治理"
   ...
   ```
 
-- 服务粒度
+### 服务粒度
 
   ```yaml
   # DemoService的sayHello方法只能消费所有端口为20880的服务实例
@@ -52,12 +46,9 @@ description: "通过 Dubbo 中的路由规则做服务治理"
     - method=sayHi => address=*:20881
   ...
   ```
+> 后续我们计划在 2.6.x 版本的基础上继续增强脚本路由功能。
 
-
-
-### 规则详解
-
-#### 各字段含义
+## 规则详解
 
 - `scope`表示路由规则的作用粒度,scope的取值会决定key的取值。**必填**。
   - service 服务粒度
@@ -71,93 +62,90 @@ description: "通过 Dubbo 中的路由规则做服务治理"
 - `priority=1` 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为 `0`。
 - `conditions` 定义具体的路由规则内容。**必填**。
 
-#### Conditions规则体
+### Conditions规则体
+`conditions`部分是规则的主体,由1到任意多条规则组成,下面我们就每个规则的配置语法做详细说明:
 
-    `conditions`部分是规则的主体,由1到任意多条规则组成,下面我们就每个规则的配置语法做详细说明:
-
-1. **格式**
+**格式**
 
 - `=>` 之前的为消费者匹配条件,所有参数和消费者的 URL 进行对比,当消费者满足匹配条件时,对该消费者执行后面的过滤规则。
 - `=>` 之后为提供者地址列表的过滤条件,所有参数和提供者的 URL 进行对比,消费者最终只拿到过滤后的地址列表。
 - 如果匹配条件为空,表示对所有消费方应用,如:`=> host != 10.20.153.11`
 - 如果过滤条件为空,表示禁止访问,如:`host = 10.20.153.10 =>`
 
-2. **表达式**
+**表达式**
 
-参数支持:
+参数支持
 
 - 服务调用信息,如:method, argument 等,暂不支持参数路由
 - URL 本身的字段,如:protocol, host, port 等
 - 以及 URL 上的所有参数,如:application, organization 等
 
-条件支持:
+条件支持
 
 - 等号 `=` 表示"匹配",如:`host = 10.20.153.10`
 - 不等号 `!=` 表示"不匹配",如:`host != 10.20.153.10`
 
-值支持:
+值支持
 
 - 以逗号 `,` 分隔多个值,如:`host != 10.20.153.10,10.20.153.11`
 - 以星号 `*` 结尾,表示通配,如:`host != 10.20.*`
 - 以美元符 `$` 开头,表示引用消费者参数,如:`host = $host`
 
-3. **Condition示例**
+### Condition示例
 
-- 排除预发布机:
+排除预发布机
 
 ```
 => host != 172.22.3.91
 ```
 
-- 白名单:
+白名单
 
 ```
 register.ip != 10.20.153.10,10.20.153.11 =>
 ```
 
-{{% alert title="注意" color="warning" %}}
-一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了
-{{% /alert %}}
+> 一个服务只能有一条白名单规则,否则两条规则交叉,就都被筛选掉了
 
-- 黑名单:
+黑名单
 
 ```
 register.ip = 10.20.153.10,10.20.153.11 =>
 ```
 
-- 服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉:
+服务寄宿在应用上,只暴露一部分的机器,防止整个集群挂掉
 
 ```
 => host = 172.22.3.1*,172.22.3.2*
 ```
 
-- 为重要应用提供额外的机器:
+为重要应用提供额外的机器
 
 ```
 application != kylin => host != 172.22.3.95,172.22.3.96
 ```
 
-- 读写分离:
+读写分离
 
 ```
 method = find*,list*,get*,is* => host = 172.22.3.94,172.22.3.95,172.22.3.96
 method != find*,list*,get*,is* => host = 172.22.3.97,172.22.3.98
 ```
 
-- 前后台分离:
+前后台分离
 
 ```
 application = bops => host = 172.22.3.91,172.22.3.92,172.22.3.93
 application != bops => host = 172.22.3.94,172.22.3.95,172.22.3.96
 ```
 
-- 隔离不同机房网段:
+隔离不同机房网段
 
 ```
 host != 172.22.3.* => host != 172.22.3.*
 ```
 
-- 提供者与消费者部署在同集群内,本机只访问本机的服务:
+提供者与消费者部署在同集群内,本机只访问本机的服务
 
 ```
 => host = $host
@@ -167,89 +155,82 @@ host != 172.22.3.* => host != 172.22.3.*
 
 ## 标签路由规则
 
-### 简介
-
 标签路由通过将某一个或多个服务的提供者划分到同一个分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,可以作为蓝绿发布、灰度发布等场景的能力基础。
 
-#### Provider
-
-标签主要是指对Provider端应用实例的分组,目前有两种方式可以完成实例分组,分别是`动态规则打标`和`静态规则打标`,其中动态规则相较于静态规则优先级更高,而当两种规则同时存在且出现冲突时,将以动态规则为准。
+### 规则详解
 
-- 动态规则打标,可随时在**服务治理控制台**下发标签归组规则
+**格式**
 
-  ```yaml
-  # governance-tagrouter-provider应用增加了两个标签分组tag1和tag2
-  # tag1包含一个实例 127.0.0.1:20880
-  # tag2包含一个实例 127.0.0.1:20881
-  ---
-    force: false
-    runtime: true
-    enabled: true
-    key: governance-tagrouter-provider
-    tags:
-      - name: tag1
-        addresses: ["127.0.0.1:20880"]
-      - name: tag2
-        addresses: ["127.0.0.1:20881"]
-   ...
-  ```
+- `Key`明确规则体作用到哪个应用。**必填**。
+- `enabled=true` 当前路由规则是否生效,可不填,缺省生效。
+- `force=false` 当路由结果为空时,是否强制执行,如果不强制执行,路由结果为空的路由规则将自动失效,可不填,缺省为 `false`。
+- `runtime=false` 
是否在每次调用时执行路由规则,否则只在提供者地址列表变更时预先执行并缓存结果,调用时直接从缓存中获取路由结果。如果用了参数路由,必须设为 
`true`,需要注意设置会影响调用的性能,可不填,缺省为 `false`。
+- `priority=1` 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为 `0`。
+- `tags` 定义具体的标签分组内容,可定义任意n(n>=1)个标签并为每个标签指定实例列表。**必填**。
+  - name, 标签名称
+- addresses, 当前标签包含的实例列表
 
 
 
-- 静态打标
+**降级约定**
 
-  ```xml
-  <dubbo:provider tag="tag1"/>
-  ```
+1. `dubbo.tag=tag1` 时优先选择 标记了`tag=tag1` 的 provider。若集群中不存在与请求标记对应的服务,默认将降级请求 
tag为空的provider;如果要改变这种默认行为,即找不到匹配tag1的provider返回异常,需设置`dubbo.force.tag=true`。
 
-  or
+2. `dubbo.tag`未设置时,只会匹配tag为空的provider。即使集群中存在可用的服务,若 tag 
不匹配也就无法调用,这与约定1不同,携带标签的请求可以降级访问到无标签的服务,但不携带标签/携带其他种类标签的请求永远无法访问到其他标签的服务。
+### Provider
 
-    ```xml
-    <dubbo:service tag="tag1"/>
-    ```
+标签主要是指对Provider端应用实例的分组,目前有两种方式可以完成实例分组,分别是`动态规则打标`和`静态规则打标`,其中动态规则相较于静态规则优先级更高,而当两种规则同时存在且出现冲突时,将以动态规则为准。
 
-  or
+> 可随时在**服务治理控制台**下发标签归组规则
 
-  ```properties
-  java -jar xxx-provider.jar -Ddubbo.provider.tag={the tag you want, may come 
from OS ENV}
-  ```
+**动态规则打标**
+```yaml
+# governance-tagrouter-provider应用增加了两个标签分组tag1和tag2
+# tag1包含一个实例 127.0.0.1:20880
+# tag2包含一个实例 127.0.0.1:20881
+---
+  force: false
+  runtime: true
+  enabled: true
+  key: governance-tagrouter-provider
+  tags:
+    - name: tag1
+      addresses: ["127.0.0.1:20880"]
+    - name: tag2
+      addresses: ["127.0.0.1:20881"]
+...
+```
 
 
 
-#### Consumer
+**静态打标**
 
-```java
-RpcContext.getContext().setAttachment(Constants.TAG_KEY,"tag1");
+```xml
+<dubbo:provider tag="tag1"/>
 ```
 
-请求标签的作用域为每一次 invocation,使用 attachment 来传递请求标签,注意保存在 attachment 
中的值将会在一次完整的远程调用中持续传递,得益于这样的特性,我们只需要在起始调用时,通过一行代码的设置,达到标签的持续传递。
+**or**
 
-> 目前仅仅支持 hardcoding 的方式设置 dubboTag。注意到 RpcContext 是线程绑定的,优雅的使用 TagRouter 
特性,建议通过 servlet 过滤器(在 web 环境下),或者定制的 SPI 过滤器设置 dubboTag。
-
-
-
-### 规则详解
+```xml
+<dubbo:service tag="tag1"/>
+```
 
-#### 格式
+**or**
 
-- `Key`明确规则体作用到哪个应用。**必填**。
-- `enabled=true` 当前路由规则是否生效,可不填,缺省生效。
-- `force=false` 当路由结果为空时,是否强制执行,如果不强制执行,路由结果为空的路由规则将自动失效,可不填,缺省为 `false`。
-- `runtime=false` 
是否在每次调用时执行路由规则,否则只在提供者地址列表变更时预先执行并缓存结果,调用时直接从缓存中获取路由结果。如果用了参数路由,必须设为 
`true`,需要注意设置会影响调用的性能,可不填,缺省为 `false`。
-- `priority=1` 路由规则的优先级,用于排序,优先级越大越靠前执行,可不填,缺省为 `0`。
-- `tags` 定义具体的标签分组内容,可定义任意n(n>=1)个标签并为每个标签指定实例列表。**必填**。
-  - name, 标签名称
-- addresses, 当前标签包含的实例列表
+```properties
+java -jar xxx-provider.jar -Ddubbo.provider.tag={the tag you want, may come 
from OS ENV}
+```
 
 
 
-#### 降级约定
+### Consumer
 
-1. `dubbo.tag=tag1` 时优先选择 标记了`tag=tag1` 的 provider。若集群中不存在与请求标记对应的服务,默认将降级请求 
tag为空的provider;如果要改变这种默认行为,即找不到匹配tag1的provider返回异常,需设置`dubbo.force.tag=true`。
+```java
+RpcContext.getContext().setAttachment(Constants.TAG_KEY,"tag1");
+```
 
-2. `dubbo.tag`未设置时,只会匹配tag为空的provider。即使集群中存在可用的服务,若 tag 
不匹配也就无法调用,这与约定1不同,携带标签的请求可以降级访问到无标签的服务,但不携带标签/携带其他种类标签的请求永远无法访问到其他标签的服务。
+> 请求标签的作用域为每一次 invocation,使用 attachment 来传递请求标签,注意保存在 attachment 
中的值将会在一次完整的远程调用中持续传递,得益于这样的特性,我们只需要在起始调用时,通过一行代码的设置,达到标签的持续传递。
 
-{{% alert title="提示" color="primary" %}}
-自定义路由参考[路由扩展](/zh/docs3-v2/java-sdk/reference-manual/spi/description/router/)
-{{% /alert %}}
+> 目前仅仅支持 hardcoding 的方式设置 dubboTag。注意到 RpcContext 是线程绑定的,优雅的使用 TagRouter 
特性,建议通过 servlet 过滤器(在 web 环境下),或者定制的 SPI 过滤器设置 dubboTag。
 
+> 自定义路由参考[路由扩展](/zh/docs3-v2/java-sdk/reference-manual/spi/description/router/)

Reply via email to