This is an automated email from the ASF dual-hosted git repository.
liujun 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 aa68ca9aaa2 Add documentation for Dubbo-Rust (#2812)
aa68ca9aaa2 is described below
commit aa68ca9aaa2207270d04919b48169a3ecfefcd07
Author: Urara <[email protected]>
AuthorDate: Sat Sep 16 18:09:33 2023 +0800
Add documentation for Dubbo-Rust (#2812)
---
.../overview/mannual/rust-sdk/router-module.md | 153 +++++++++++++++++++++
.../overview/mannual/rust-sdk/service-discovery.md | 104 ++++++++++++++
static/imgs/rust/dubbo-rust-service-discovery.png | Bin 0 -> 18886 bytes
static/imgs/rust/router-example/nacos-example.png | Bin 0 -> 50554 bytes
4 files changed, 257 insertions(+)
diff --git a/content/zh-cn/overview/mannual/rust-sdk/router-module.md
b/content/zh-cn/overview/mannual/rust-sdk/router-module.md
new file mode 100644
index 00000000000..6b78285c9c4
--- /dev/null
+++ b/content/zh-cn/overview/mannual/rust-sdk/router-module.md
@@ -0,0 +1,153 @@
+---
+aliases:
+ - /zh/docs3-v2/rust-sdk/router-module/
+ - /zh-cn/docs3-v2/rust-sdk/router-module/
+description: "服务路由"
+linkTitle: 服务路由
+title: 服务路由规则
+type: docs
+weight: 2
+---
+
+## 条件路由
+使用模式与 [条件路由文档](/zh/overview/core-features/traffic/condition-rule/)
中的模式类似,但配置格式略有不同,以下是条件路由规则示例。
+
+基于以下示例规则,所有 `org.apache.dubbo.sample.tri.Greeter` 服务 `greet`
+方法的调用都将被转发到有 `port=8888` 标记的地址子集
+
+```yaml
+configVersion: v1.0
+scope: "service"
+force: false
+enabled: true
+key: "org.apache.dubbo.sample.tri.Greeter"
+conditions:
+ - method=greet => port=8888
+```
+注:<br>
+dubbo rust目前还没有实现对于**应用粒度**的区分,无法区分服务来自哪个应用<br>
+因此对于标签路由和条件路由,都仅能配置一条应用级别的配置<br>
+对于应用级别的配置,默认key指定为application,此配置将对全部服务生效<br>
+例如:
+```yaml
+configVersion: v1.0
+scope: "application"
+force: false
+enabled: true
+key: application
+conditions:
+ - ip=127.0.0.1 => port=8000~8888
+```
+
+#### 匹配/过滤条件
+
+**参数支持**
+
+* 服务调用上下文,如:service_name, method等
+* URL 本身的字段,如:location, ip, port等
+* URL params中存储的字段信息
+
+**条件支持**
+
+* 等号 = 表示 "匹配",如:method = getComment
+* 不等号 != 表示 "不匹配",如:method != getComment
+
+**值支持**
+
+* 以逗号 , 分隔多个值,如:ip != 10.20.153.10,10.20.153.11
+* 以星号 * 结尾,表示通配,如:ip != 10.20.*
+* 整数值范围,如:port = 80~8080
+
+
+## 标签路由
+使用模式与
[标签路由文档](/zh/overview/core-features/traffic/tag-rule/)中的模式类似,但配置格式略有不同,以下是标签路由规则示例
+```yaml
+configVersion: v1.0
+force: false
+enabled: true
+key: application
+tags:
+ - name: local
+ match:
+ - key: ip
+ value: 127.0.0.1
+```
+在此配置中,所有ip=127.0.0.1的服务提供者/消费者均会被打上local的标签
+
+## 动态配置
+### 动态下发配置 简介
+动态下发配置使用 Nacos 作为配置中心实现,需要在项目的 application.yaml 配置文件中对 Nacos
进行配置,若不进行配置则使用本地路由配置。
+### 使用方式:
+```yaml
+nacos:
+ addr: "127.0.0.1:8848"
+ namespace: "namespace-name"
+ app: "app-name"
+ enable_auth:
+ auth_username: username
+ auth_password: password
+```
+app:路由配置项在Nacos中所处的app
+namespace:配置信息在Nacos所处的namespace
+addr:Nacos服务地址
+enable_auth:可选配置项,若启用了Nacos的认证功能,则需要配置此项,auth_username对应帐号,auth_password对应密钥
+
+
+#### 配置条件路由
+
+在nacos中创建条件路由配置项时,
+app和namespace为配置nacos时所填写的信息;
+group:固定为condition;
+name:需要和 服务名称 保持一致;
+
+
+#### 配置标签路由
+在nacos中创建标签路由配置项时,
+
+app:配置nacos时所填写的app;
+namespace:配置nacos时所填写的namespace;
+group:固定为tag;
+name:固定为application;
+
+#### 注意事项
+dubbo rust目前还没有实现对于**应用**的区分,无法区分服务来自哪个应用;
+故对于应用级别的配置项,默认对所有服务生效
+因此对于标签路由和条件路由,都仅能配置一条应用级别的配置,配置名称(name)指定为application
+
+#### 例:
+
+#### 对应的配置项:
+
+*服务级别的条件路由配置:*
+```yaml
+configVersion: v1.0
+scope: "service"
+force: false
+enabled: true
+key: "org.apache.dubbo.sample.tri.Greeter"
+conditions:
+ - method=greet => ip=127.*
+```
+*标签路由配置:*
+```yaml
+configVersion: v1.0
+force: true
+enabled: true
+key: shop-detail
+tags:
+ - name: local
+ match:
+ - key: ip
+ value: 127.0.0.1
+```
+
+*应用级别的条件路由配置:*
+```yaml
+configVersion: v1.0
+scope: "application"
+force: false
+enabled: true
+key: application
+conditions:
+ - ip=127.0.0.1 => port=8000~8888
+```
\ No newline at end of file
diff --git a/content/zh-cn/overview/mannual/rust-sdk/service-discovery.md
b/content/zh-cn/overview/mannual/rust-sdk/service-discovery.md
new file mode 100644
index 00000000000..1171d74d3b3
--- /dev/null
+++ b/content/zh-cn/overview/mannual/rust-sdk/service-discovery.md
@@ -0,0 +1,104 @@
+---
+aliases:
+ - /zh/docs3-v2/rust-sdk/service-discovery/
+ - /zh-cn/docs3-v2/rust-sdk/service-discovery/
+description: 服务发现
+feature:
+ description: |
+ Dubbo Rust依赖第三方注册中心组件来协调服务发现过程,支持的注册中心: Nacos、Zookeeper。
+ title: 服务发现
+linkTitle: 服务发现
+title: 服务发现
+type: docs
+weight: 2
+---
+
+## Dubbo Rust服务发现简介
+Dubbo Rust提供的是一种 Client-Based 的服务发现机制,依赖第三方注册中心组件来协调服务发现过程,支持的注册中心:
Nacos、Zookeeper
+
+以下是 Dubbo Rust服务发现机制的基本工作原理图:
+
+
+
+服务发现包含提供者、消费者和注册中心三个参与角色,其中,Dubbo 提供者实例注册 URL 地址到注册中心,注册中心负责对数据进行聚合,Dubbo
消费者从注册中心读取地址列表并订阅变更,每当地址列表发生变化,注册中心将最新的列表通知到所有订阅的消费者实例。
+
+* Dubbo Rust注册中心以服务粒度聚合实例数据,消费者按消费需求精准订阅。
+
+Dubbo
Rust服务发现的一个示例:[example](https://github.com/apache/dubbo-rust/tree/feat/cluster/examples/greeter)
+
+## 高效地址推送实现
+
+从注册中心视角来看,它负责以服务名 (例如:org.apache.dubbo.sample.tri.Greeter)
对整个集群的实例地址进行聚合,每个对外提供服务的实例将自身的实例ip:port 地址信息 (例如:127.0.0.1:8848) 注册到注册中心。
+
+## 配置方式
+Dubbo Rust服务发现支持两种注册中心组件,既Nacos、Zookeeper,可以通过以下方式创建不同的注册中心,并将其绑定到Dubbo Rust框架。
+
+配置方式:
+假设有服务:Greeter,对应的服务实现为GreeterServerImpl
+
+服务端:
+```
+ //注册服务
+ register_server(GreeterServerImpl {
+ name: "greeter".to_string(),
+ });
+
+ //创建注册中心
+ let zkr = ZookeeperRegistry::default();
+
+ let r = RootConfig::new();
+ let r = match r.load() {
+ Ok(config) => config,
+ Err(_err) => panic!("err: {:?}", _err), // response was droped
+ };
+
+ //启动Dubbo框架
+ let mut f = Dubbo::new()
+ .with_config(r)
+ //将创建出的注册中心绑定Dubbo框架
+ .add_registry("zookeeper", Box::new(zkr));
+ f.start().await;
+```
+对于上述过程,可以通过修改创建注册中心的步骤来更改所使用的注册中心
+
+客户端:
+```
+ let mut builder = ClientBuilder::new();
+
+ //通过env获取注册中心地址
+ if let Ok(zk_servers) = env::var("ZOOKEEPER_SERVERS") {
+ //创建注册中心
+ let zkr = ZookeeperRegistry::new(&zk_servers);
+ //绑定注册中心
+ let directory = RegistryDirectory::new(Box::new(zkr));
+ builder = builder.with_directory(Box::new(directory));
+ } else if let Ok(nacos_url_str) = env::var("NACOS_URL") {
+ // NACOS_URL=nacos://mse-96efa264-p.nacos-ans.mse.aliyuncs.com
+ //创建注册中心
+ let nacos_url = Url::from_url(&nacos_url_str).unwrap();
+ let registry = NacosRegistry::new(nacos_url);
+ //绑定注册中心
+ let directory = RegistryDirectory::new(Box::new(registry));
+ builder = builder.with_directory(Box::new(directory));
+ } else {
+ builder = builder.with_host("http://127.0.0.1:8888");
+ }
+
+ let mut cli = GreeterClient::new(builder);
+```
+
+创建Nacos注册中心:
+```
+//通过Url创建注册中心实例
+let nacos_url = Url::from_url("127.0.0.1:1221").unwrap();
+let registry = NacosRegistry::new(nacos_url);
+```
+创建Zookeeper注册中心:
+```
+//直接创建Zookeeper注册中心
+let zkr = ZookeeperRegistry::new("127.0.0.1:1221");
+```
+```
+//使用default方法创建Zookeeper注册中心会默认使用环境变量中的值ZOOKEEPER_SERVERS
+let zkr = ZookeeperRegistry::default();
+```
diff --git a/static/imgs/rust/dubbo-rust-service-discovery.png
b/static/imgs/rust/dubbo-rust-service-discovery.png
new file mode 100644
index 00000000000..d2667d25b95
Binary files /dev/null and b/static/imgs/rust/dubbo-rust-service-discovery.png
differ
diff --git a/static/imgs/rust/router-example/nacos-example.png
b/static/imgs/rust/router-example/nacos-example.png
new file mode 100644
index 00000000000..6ad34005d41
Binary files /dev/null and b/static/imgs/rust/router-example/nacos-example.png
differ