You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/11/27 06:30:06 UTC
[servicecomb-docs] branch master updated: 3rdparty registry and
service center docs improvement (#206)
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-docs.git
The following commit(s) were added to refs/heads/master by this push:
new dc49501 3rdparty registry and service center docs improvement (#206)
dc49501 is described below
commit dc49501f4f0e1ef8d2127e6905e75bc9efb055e3
Author: bao liu <bi...@qq.com>
AuthorDate: Fri Nov 27 14:29:58 2020 +0800
3rdparty registry and service center docs improvement (#206)
---
.../build-consumer/3rd-party-service-invoke.md | 55 +++----
.../zh_CN/docs/registry/introduction.md | 21 ---
.../zh_CN/docs/registry/multi-registries.md | 35 -----
.../zh_CN/docs/registry/service-center.md | 172 +++++++++++++++++++++
java-chassis-reference/zh_CN/docs/security/rbac.md | 71 ---------
java-chassis-reference/zh_CN/docs/toc.md | 5 +-
java-chassis-reference/zh_CN/mkdocs.yml | 2 +-
7 files changed, 198 insertions(+), 163 deletions(-)
diff --git a/java-chassis-reference/zh_CN/docs/build-consumer/3rd-party-service-invoke.md b/java-chassis-reference/zh_CN/docs/build-consumer/3rd-party-service-invoke.md
index f8508eb..90fcf75 100644
--- a/java-chassis-reference/zh_CN/docs/build-consumer/3rd-party-service-invoke.md
+++ b/java-chassis-reference/zh_CN/docs/build-consumer/3rd-party-service-invoke.md
@@ -2,9 +2,11 @@
## 概念阐述
-ServiceComb允许用户注册第三方REST服务的endpoint、接口契约等信息,使用户可以以调用ServiceComb provider服务相同的方式编写调用第三方服务的代码。
+第三方服务没有在服务中心注册,不存契约信息,Java Chassis 提供一种透明的方式访问第三方服务。
使用该功能调用第三方服务时,发往第三方服务的请求会经过consumer端handler链、HttpClientFilter的处理,
-即该功能支持对第三方服务调用的治理功能,并且也支持ServiceComb既有的用户自定义扩展处理机制。
+即该功能支持对第三方服务调用的治理功能,并且也支持ServiceComb既有的用户自定义扩展处理机制。
+
+另外开发者也可以使用 [本地注册发现](../registry/local-registry.md) 实现第三方调用, 两种方式实现的效果是一致的。
## 示例代码
@@ -51,40 +53,30 @@ ServiceComb允许用户注册第三方REST服务的endpoint、接口契约等信
}
```
-3. 在consumer服务中调用ServiceComb提供的方法将其进行注册:
+3. 通过实现 `ThirdServiceWithInvokerRegister` 注册第三方服务信息。 可以注册多个 schema。
```java
- String endpoint = "rest://127.0.0.1:8080";
- RegistryUtils.getServiceRegistry().registerMicroserviceMappingByEndpoints(
- // 3rd party rest service name, you can specify the name on your need as long as you obey the microservice naming rule
- "thirdPartyService",
- // service version
- "0.0.1",
- // list of endpoints
- Collections.singletonList(endpoint),
- // java interface class to generate swagger schema
- ThirdPartyRestServiceInterface.class
- );
+ @Configuration
+ public class ThirdSvc extends ThirdServiceWithInvokerRegister {
+ public ThirdSvc() {
+ super("3rd-svc");
+
+ addSchema("schema-1", VertxServerIntf.class);
+ }
+ }
```
+ ***注意:*** java chassis 2.1.3 以上版本才支持 ThirdServiceWithInvokerRegister。
+
4. 调用第三方服务,声明和调用方式与调用ServiceComb provider服务相同,此处以RPC调用方式为例。
```java
- // declare rpc reference to 3rd party rest service, schemaId is the same as microservice name
- @RpcReference(microserviceName = "thirdPartyService", schemaId = "thirdPartyService")
- ThirdPartyRestServiceInterface thirdPartyRestService;
-
- @RequestMapping(path = "/{pathVar}", method = RequestMethod.GET)
- public String testInvoke(@PathVariable(name = "pathVar") String pathVar) {
- LOGGER.info("testInvoke() is called, pathVar = [{}]", pathVar);
- // invoke 3rd party rest service
- String response = thirdPartyRestService.testPathVar(pathVar);
- LOGGER.info("testInvoke() response = [{}]", response);
- return response;
- }
+ VertxServerIntf client = BeanUtils.getContext().getBean(VertxServerIntf.class);
+ client.testPathVar(pathVar);
```
-5. 使用治理功能。使用治理功能的方法与普通的consumer调用provider场景类似。以限流策略为例,在consumer服务的microservice.yaml文件中进行如下配置:
+5. 使用治理功能。使用治理功能的方法与普通的consumer调用provider场景类似。以限流策略为例,在consumer
+ 服务的microservice.yaml文件中进行如下配置:
```yaml
servicecomb:
@@ -99,9 +91,8 @@ ServiceComb允许用户注册第三方REST服务的endpoint、接口契约等信
此时即将consumer调用名为`thirdPartyService`的第三方REST服务的QPS设置为1。当consumer调用`thirdPartyService`的流量高于1QPS时,
将会得到`429 Too Many Requests`的`InvocationException`异常。
-> ***注意:***
-- endpoint信息是以`rest`开头的,而非`http`,可以参照ServiceComb微服务注册到服务中心的endpoint样式进行编写。
-- 当第三方服务有多个实例(地址)时,可以在endpoint list中指定多个地址,ServiceComb支持对多个地址进行负载均衡处理,处理方式和对待ServiceComb
- provider服务相同。
-- 当前仅支持一次性注册第三方服务及其实例信息,不支持增加、删除和修改操作。
+6. 配置第三分服务的实例信息
+ 3rd-svc:
+ urls:
+ - http://localhost:8080
diff --git a/java-chassis-reference/zh_CN/docs/registry/introduction.md b/java-chassis-reference/zh_CN/docs/registry/introduction.md
index 0df7a3b..8b2dbaf 100644
--- a/java-chassis-reference/zh_CN/docs/registry/introduction.md
+++ b/java-chassis-reference/zh_CN/docs/registry/introduction.md
@@ -25,27 +25,6 @@
不同的注册发现机制,可能注册的信息和发现的信息不包括上述信息的全集,可以通过组合不同的注册发现机制,提供完整的信息。
比如,可以通过 mDNS 的方式发现网络地址(endpoints)信息, 可以通过配置文件的方式,发现契约信息。
-## 使用服务中心
-
-服务中心(servicecomb-service-center) 提供了完备的注册发现机制, 实现了所有 `Microservice` 和 `MicroserviceInstance` 信息的注册和发现,
-是 servicecomb 缺省使用的注册发现机制。
-
-服务中心支持使用 `PULL` 和 `PUSH` 两种模式通知实例变化, 开发者可以配置服务中心集群地址、连接参数以及心跳管理等。
-
-* 表1-1 访问服务中心常用的配置项
-
-| 配置项 | 默认值 | 是否必选 | 含义 |
-| :--- | :--- | :--- | :--- |
-| servicecomb.service.registry.</p>address | http://127.0.0.1:30100 | 是 | 服务中心的地址信息,可以配置多个,用逗号分隔。 |
-| servicecomb.service.registry.</p>instance.watch | true | 否 | 是否采用PUSH模式监听实例变化。为false的时候表示使用PULL模式。 |
-| servicecomb.service.registry.</p>autodiscovery | false | 否 | 是否自动发现服务中心的地址。当需要配置部分地址,其他地址由配置的服务中心实例发现的时候,开启这个配置。 |
-| servicecomb.service.registry.</p>instance.healthCheck.interval | 30 | 否 | 心跳间隔。 |
-| servicecomb.service.registry.</p>instance.healthCheck.times | 3 | 否 | 允许的心跳失败次数。当连续第times+1次心跳仍然失败时则实例被sc下线。即interval \* (times + 1)决定了实例被自动注销的时间。如果服务中心等待这么长的时间没有收取到心跳,会注销实例。 |
-| servicecomb.service.registry.</p>instance.empty.protection | true | 否 | 当从服务中心查询到的地址为空的时候,是否覆盖本地缓存。这个是一种可靠性保护机制,避免实例异常批量下线导致的请求失败。 |
-
-servicecomb 与服务中心采用 HTTP 进行交互, HTTP client 相关配置可以参
-考 [Service Center Client 配置项](../config-reference/service-center-client.md)
-
## 同时使用多个注册发现
从 2.1.0 版本开始,可以同时使用多个注册发现的实现。组合不同的注册发现的实现,能够满足一些非常重要场景的需求。
diff --git a/java-chassis-reference/zh_CN/docs/registry/multi-registries.md b/java-chassis-reference/zh_CN/docs/registry/multi-registries.md
deleted file mode 100644
index 1796994..0000000
--- a/java-chassis-reference/zh_CN/docs/registry/multi-registries.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# 连接多个服务中心
-
-有些应用场景需要连接多个服务中心。比如一个应用系统会在不同的 region 部署,其中一个 region 的服务需要访问
-另外一个 region 的服务, 这个时候,可以连接另外 region 的服务中心,发现服务信息。
-
-***注意:*** 连接多个服务中心指的是不同的服务中心集群,不是指一个集群内部的多个服务中心实例。
-
-连接多个服务中心比较简单, 只需要在项目里面定义新的服务中心的配置信息,通过 spring bean 的方式注入:
-
-```java
-@Configuration
-public class ServerBServiceCenterConfiguration {
- @Bean("serverBServiceCenterConfig")
- public ServiceRegistryConfig serverBServiceCenterConfig() {
- ServiceRegistryConfig config = ServiceRegistryConfig.buildFromConfiguration();
- return ServiceRegistryConfigCustomizer.from(config)
- .addressListFromConfiguration("servicecomb.service.registry-serverB.address").get();
- }
-}
-```
-
-上面的代码复用了缺省服务中心的配置信息,只修改了连接地址,代码指定了下面的配置项。如果需要自定义其他配置项,可以
-通过继承 ServiceRegistryConfig 来实现。
-
-```yaml
-servicecomb:
- service:
- registry:
- address: http://127.0.0.1:30100
- registry-serverB:
- address: http://127.0.0.1:40100
-```
-
-启用多个服务中心以后,会在不同的服务中心查找服务的实例,并对信息进行合并。
-
diff --git a/java-chassis-reference/zh_CN/docs/registry/service-center.md b/java-chassis-reference/zh_CN/docs/registry/service-center.md
new file mode 100644
index 0000000..c412bad
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/registry/service-center.md
@@ -0,0 +1,172 @@
+# 使用服务中心
+
+服务中心(servicecomb-service-center) 提供了完备的注册发现机制, 实现了所有 `Microservice` 和 `MicroserviceInstance` 信息的注册和发现,
+是 servicecomb 缺省使用的注册发现机制。
+
+服务中心支持使用 `PULL` 和 `PUSH` 两种模式通知实例变化, 开发者可以配置服务中心集群地址、连接参数以及心跳管理等。
+
+* 表1-1 访问服务中心常用的配置项
+
+| 配置项 | 默认值 | 是否必选 | 含义 |
+| :--- | :--- | :--- | :--- |
+| servicecomb.service.registry.</p>address | http://127.0.0.1:30100 | 是 | 服务中心的地址信息,可以配置多个,用逗号分隔。 |
+| servicecomb.service.registry.</p>instance.watch | true | 否 | 是否采用PUSH模式监听实例变化。为false的时候表示使用PULL模式。 |
+| servicecomb.service.registry.</p>autodiscovery | false | 否 | 是否自动发现服务中心的地址。当需要配置部分地址,其他地址由配置的服务中心实例发现的时候,开启这个配置。 |
+| servicecomb.service.registry.</p>instance.healthCheck.interval | 30 | 否 | 心跳间隔。 |
+| servicecomb.service.registry.</p>instance.healthCheck.times | 3 | 否 | 允许的心跳失败次数。当连续第times+1次心跳仍然失败时则实例被sc下线。即interval \* (times + 1)决定了实例被自动注销的时间。如果服务中心等待这么长的时间没有收取到心跳,会注销实例。 |
+| servicecomb.service.registry.</p>instance.empty.protection | true | 否 | 当从服务中心查询到的地址为空的时候,是否覆盖本地缓存。这个是一种可靠性保护机制,避免实例异常批量下线导致的请求失败。 |
+
+servicecomb 与服务中心采用 HTTP 进行交互, HTTP client 相关配置可以参
+考 [Service Center Client 配置项](../config-reference/service-center-client.md)
+
+使用服务中心需要确保下面的软件包引入:
+
+```
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>registry-service-center</artifactId>
+ </dependency>
+```
+
+也可以直接依赖:
+
+```
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>solution-basic</artifactId>
+ </dependency>
+```
+
+## 使用 RBAC 认证
+
+服务中心支持[RBAC认证](https://service-center.readthedocs.io/en/latest/user-guides/rbac.html),服务中心开启RBAC认证之
+后,客户端调用服务中心接口都需要先获取token,保证服务的安全可信。 使用 RBAC 认证, 需要使用 2.1.3 及其以上的版本。
+
+* 服务配置
+
+ 使用 RBAC 认证,需要在配置文件中增加如下配置项, 指定连接服务中心的用户名和密码:
+
+ ```
+ servicecomb:
+ credentials:
+ account:
+ name: root #服务中心支持的用户名
+ password: your-password #用户名对应的密码
+ cipher: default #账号密码加解密用的算法实现类
+ ```
+
+ 账号密码都是敏感信息,一般需要加密保存,使用的时候再解密,Java Chassis 提供了一个扩展机制,用户只需要实现接口
+ `org.apache.servicecomb.foundation.auth.Cipher`,并注册成Spring Bean,就会自动被使用,接口里面包含两个方法:
+
+ ```java
+ String name();
+
+ char[] decrypt(char[] encrypted);
+ ```
+
+ name方法返回cipher的名称,对应 `servicecomb.credentials.cipher` 的配置,decrypt是解密接口,用户名、密码使用的时候都会调用这个方法进行解密。
+ 下面给了一个最简单的base64编解码的实现示例,用户使用base64编码把账号密码配置到配置文件即可。
+
+ ***注意***: base64 并不是安全加密算法,请勿在生产环境使用。
+
+ ```yaml
+ servicecomb:
+ credentials:
+ account:
+ name: cm9vdA==
+ password: eW91ci1wYXNzd29yZCA=
+ cipher: base64
+ ```
+
+ ```java
+ import java.util.Base64;
+
+ import org.apache.servicecomb.foundation.auth.Cipher;
+ import org.springframework.stereotype.Component;
+
+ /**
+ * Base64解码实现
+ */
+ @Component
+ public class Base64Cipher implements Cipher {
+ @Override
+ public String name() {
+ return "base64";
+ }
+
+ @Override
+ public char[] decrypt(char[] encrypted) {
+ return new String(Base64.getDecoder().decode(new String(encrypted))).toCharArray();
+ }
+ }
+ ```
+
+## 使用 AK/SK 认证
+
+华为云微服务引擎专业版的服务中心需要使用 AK/SK 认证, 使用 AK/SK 认证, 需要使用 2.1.3 及其以上的版本。
+AK/SK 认证需要配置如下信息:
+
+```yaml
+servciecomb:
+ credentials:
+ akskEnabled: true
+ accessKey: your access key
+ secretKey: your secrete key
+ akskCustomCipher: default # 加密算法, 和 RBAC 一样
+ project: cn-south-1 # 项目名称,根据实际情况填写
+```
+
+secreteKey 支持加密存储, 扩展方式同 RBAC 。
+
+使用AK/SK 需要下面的软件包引入:
+
+```
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>servicestage</artifactId>
+ </dependency>
+```
+
+也可以直接依赖:
+
+```
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>solution-basic</artifactId>
+ </dependency>
+```
+
+## 连接多个服务中心
+
+有些应用场景需要连接多个服务中心。比如一个应用系统会在不同的 region 部署,其中一个 region 的服务需要访问
+另外一个 region 的服务, 这个时候,可以连接另外 region 的服务中心,发现服务信息。
+
+***注意:*** 连接多个服务中心指的是不同的服务中心集群,不是指一个集群内部的多个服务中心实例。
+
+连接多个服务中心比较简单, 只需要在项目里面定义新的服务中心的配置信息,通过 spring bean 的方式注入:
+
+```java
+@Configuration
+public class ServerBServiceCenterConfiguration {
+ @Bean("serverBServiceCenterConfig")
+ public ServiceRegistryConfig serverBServiceCenterConfig() {
+ ServiceRegistryConfig config = ServiceRegistryConfig.buildFromConfiguration();
+ return ServiceRegistryConfigCustomizer.from(config)
+ .addressListFromConfiguration("servicecomb.service.registry-serverB.address").get();
+ }
+}
+```
+
+上面的代码复用了缺省服务中心的配置信息,只修改了连接地址,代码指定了下面的配置项。如果需要自定义其他配置项,可以
+通过继承 ServiceRegistryConfig 来实现。
+
+```yaml
+servicecomb:
+ service:
+ registry:
+ address: http://127.0.0.1:30100
+ registry-serverB:
+ address: http://127.0.0.1:40100
+```
+
+启用多个服务中心以后,会在不同的服务中心查找服务的实例,并对信息进行合并。
diff --git a/java-chassis-reference/zh_CN/docs/security/rbac.md b/java-chassis-reference/zh_CN/docs/security/rbac.md
deleted file mode 100644
index 6bd4034..0000000
--- a/java-chassis-reference/zh_CN/docs/security/rbac.md
+++ /dev/null
@@ -1,71 +0,0 @@
-## 场景描述
-
-服务注册发现,服务中心需要确保服务是信任的,服务中心支持[RBAC认证](https://service-center.readthedocs.io/en/latest/user-guides/rbac.html),服务中心开启RBAC认证之后,客户端调用服务中心接口都需要先获取token,保证服务的安全可信(需要2.1.2+版本才支持)
-
-## 服务配置
-
-* 在pom.xml中增加依赖:
-
-```
- <dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>solution-basic</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>registry-service-center</artifactId>
- </dependency>
-```
-
-* 在microservice.yaml中添加账号配置
-
-```
-servicecomb:
- credentials:
- account:
- name: root #服务中心支持的用户名
- password: your-password #用户名对应的密码
- cipher: default #账号密码加解密用的算法实现类
-```
-
-## 账号密码加解密配置
-账号密码都是敏感信息,一般需要加密保存,使用的时候再解密,ServiceComb JavaChassis提供了一个扩展机制,用户只需要实现接口org.apache.servicecomb.foundation.auth.Cipher,并注册成Spring Bean,就会自动被使用,接口里面包含两个方法:
-```java
- String name();
-
- char[] decrypt(char[] encrypted);
-```
-name方法返回cipher的名称,对应servicecomb.credentials.cipher的配置,decrypt是解密接口,用户名、密码使用的时候都会调用这个方法进行解密。下面给了一个最简单的base64编解码的实现示例,用户使用base64编码把账号密码配置到配置文件即可
-```yaml
-servicecomb:
- credentials:
- account:
- name: cm9vdA==
- password: eW91ci1wYXNzd29yZCA=
- cipher: base64
-```
-```java
-import java.util.Base64;
-
-import org.apache.servicecomb.foundation.auth.Cipher;
-import org.springframework.stereotype.Component;
-
-/**
- * Base64解码实现
- */
-@Component
-public class Base64Cipher implements Cipher {
- @Override
- public String name() {
- return "base64";
- }
-
- @Override
- public char[] decrypt(char[] encrypted) {
- return new String(Base64.getDecoder().decode(new String(encrypted))).toCharArray();
- }
-}
-```
-
-
-
diff --git a/java-chassis-reference/zh_CN/docs/toc.md b/java-chassis-reference/zh_CN/docs/toc.md
index 46e347a..556c0da 100644
--- a/java-chassis-reference/zh_CN/docs/toc.md
+++ b/java-chassis-reference/zh_CN/docs/toc.md
@@ -73,10 +73,10 @@
* [HTTP2](transports/http2.md)
* 多样化的服务注册与发现功能参考:
* [注册发现说明](registry/introduction.md)
+ * [使用服务中心](registry/service-center.md)
* [本地注册发现](registry/local-registry.md)
* [去中心化注册发现](registry/distributed.md)
- * [连接多个服务中心](registry/multi-registries.md)
-- 服务治理功能参考::
+- 服务治理功能参考:
- [处理链介绍](references-handlers/intruduction.md)
- [负载均衡](references-handlers/loadbalance.md)
- [限流](references-handlers/ratelimit.md)
@@ -91,7 +91,6 @@
- [使用TLS通信](security/tls.md)
- [使用RSA认证](security/shi-yong-rsa-ren-zheng.md)
- [公钥认证](references-handlers/publickey.md)
- - [RBAC认证](security/rbac.md)
* 管理服务配置:
* [通用配置说明](config/general-config.md)
* [配置注入机制](config/inject-config.md)
diff --git a/java-chassis-reference/zh_CN/mkdocs.yml b/java-chassis-reference/zh_CN/mkdocs.yml
index 10c7cba..5ee4505 100644
--- a/java-chassis-reference/zh_CN/mkdocs.yml
+++ b/java-chassis-reference/zh_CN/mkdocs.yml
@@ -18,9 +18,9 @@ nav:
- HTTP2: transports/http2.md
- 多样化的服务注册与发现功能参考:
- 注册发现说明: registry/introduction.md
+ - 使用服务中心: registry/service-center.md
- 本地注册发现: registry/local-registry.md
- 去中心化注册发现: registry/distributed.md
- - 连接多个服务中心: registry/multi-registries.md
- 服务治理功能参考:
- 处理链介绍: references-handlers/intruduction.md
- 负载均衡: references-handlers/loadbalance.md