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/06/19 07:24:30 UTC

[servicecomb-docs] branch master updated: [SCB-1991]local registration given an easier way to register schema

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 223724d  [SCB-1991]local registration given an easier way to register schema
223724d is described below

commit 223724d5cf317fad34fc127aa67c620cf8346b7b
Author: liubao <bi...@qq.com>
AuthorDate: Fri Jun 19 14:30:10 2020 +0800

    [SCB-1991]local registration given an easier way to register schema
---
 .../zh_CN/docs/registry/distributed.md             |   6 +-
 .../zh_CN/docs/registry/introduction.md            |  48 +------
 .../zh_CN/docs/registry/local-registry.md          | 144 +++++++++++++++++++
 .../zh_CN/docs/registry/multi-registries.md        | 153 +--------------------
 java-chassis-reference/zh_CN/docs/toc.md           |   3 +-
 java-chassis-reference/zh_CN/mkdocs.yml            |   3 +-
 6 files changed, 153 insertions(+), 204 deletions(-)

diff --git a/java-chassis-reference/zh_CN/docs/registry/distributed.md b/java-chassis-reference/zh_CN/docs/registry/distributed.md
index a66095d..2775e38 100644
--- a/java-chassis-reference/zh_CN/docs/registry/distributed.md
+++ b/java-chassis-reference/zh_CN/docs/registry/distributed.md
@@ -4,7 +4,7 @@
 对于弹性扩缩容要求不高的场景。 servicecomb 提供了两种方式满足去中心化的注册发现。这两种方式涉及如下模块:
 
 * 本地注册发现: registry-local,通过本地配置文件注册发现
-* 广播注册发现: registry-zeroconfig, 采用广播的方式注册发现
+* 组播注册发现: registry-zeroconfig, 采用组播的方式注册发现
 * 实例契约发现: registry-schema-dicovery, 通过给实例发送请求,从实例查询契约
 
 ## 本地注册发现 + 实例契约发现
@@ -41,9 +41,9 @@ demo-zeroconfig-schemadiscovery-registry-edge:
           - rest://localhost:8888
 ```
 
-## 广播注册发现 + 实例契约发现
+## 组播注册发现 + 实例契约发现
 
-广播注册发现采用UDP协议发现实例。使用这种方式只需要在项目中配置依赖:
+组播注册发现采用UDP协议发现实例。使用这种方式只需要在项目中配置依赖:
 
 ```xml
     <dependency>
diff --git a/java-chassis-reference/zh_CN/docs/registry/introduction.md b/java-chassis-reference/zh_CN/docs/registry/introduction.md
index 718d3e4..0df7a3b 100644
--- a/java-chassis-reference/zh_CN/docs/registry/introduction.md
+++ b/java-chassis-reference/zh_CN/docs/registry/introduction.md
@@ -9,7 +9,7 @@
 对于规模较小的系统,也可以不使用中间件服务,而是通过配置文件的方式,在微服务 A 中指定微服务 B 的地址。这种方式
 适合组网情况固定,不会弹性扩缩容的场景。
 
-在局域网环境下,还可以通过广播协议,比如 mDNS 发现其他的服务,这种方式不需要做额外的配置。
+在局域网环境下,还可以通过组播协议,比如 mDNS 发现其他的服务,这种方式不需要做额外的配置。
 
 ## 注册发现信息
 
@@ -46,55 +46,9 @@
 servicecomb 与服务中心采用 HTTP 进行交互, HTTP client 相关配置可以参
 考 [Service Center Client 配置项](../config-reference/service-center-client.md)
 
-## 本地注册发现
-
-servicecomb 提供了本地注册发现机制。服务注册时, `Microservice` 和 `MicroserviceInstance` 信息、契约信息
-都注册到微服务本地内存。 服务发现时,从配置文件(registry.yaml)中读取其他服务的 `Microservice` 和 
-`MicroserviceInstance` 信息,从目录 `microservices/{serviceName}/{schemaId}.yaml` 或者 
-`applications/{appId}/{serviceName}/{schemaId}.yaml` 读取微服务的契约
-信息。本地注册发现主要用于一些小规模,组网确定的场景使用。
-
-* registry.yaml 格式
-
-        ```yaml
-        ms1:
-          - id: "001"
-            version: "1.0"
-            appid: exampleApp
-            environment: development
-            schemaIds:
-              - hello
-            instances:
-              - endpoints:
-                  - rest://127.0.0.1:8080
-          - id: "002"
-            version: "2.0"
-            environment: development
-            appid: exampleApp
-            schemaIds:
-              - hello
-            instances:
-              - endpoints:
-                  - rest://127.0.0.2:8080
-        ms2:
-          - id: "003"
-            version: "1.0"
-            environment: development
-            appid: exampleApp
-            schemaIds:
-              - hello
-            instances:
-              - endpoints:
-                  - rest://127.0.0.1:8081
-        ``` 
-
-  `registry.yaml` 指定了微服务的基本信息:应用ID (appId), 微服务名称 (serviceName),
-  微服务版本(version),环境(environment) 和契约;微服务实例基本信息:网络地址(endpoints)。
-
 ## 同时使用多个注册发现
 
 从 2.1.0 版本开始,可以同时使用多个注册发现的实现。组合不同的注册发现的实现,能够满足一些非常重要场景的需求。
-详细参考[组合使用多个实现](multi-registries.md)的介绍。
 
 ### 使用多个服务中心的约束和行为
 
diff --git a/java-chassis-reference/zh_CN/docs/registry/local-registry.md b/java-chassis-reference/zh_CN/docs/registry/local-registry.md
new file mode 100644
index 0000000..ca5114c
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/registry/local-registry.md
@@ -0,0 +1,144 @@
+# 本地注册发现
+
+本地注册发现是一种静态的服务发现机制。使用本地注册发现,需要在项目中引入如下依赖:
+
+```xml
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>registry-local</artifactId>
+    </dependency>
+```
+
+本地服务发现可以在很多不同的场景使用,能够帮助开发者解决很多系统集成问题,比如和网关的集成,和第三方服务的集成。
+
+## 注册过程
+
+和使用服务中心一样, 系统会自动完成注册。系统会从配置文件中读取本微服务的信息和实例信息,以及本微服务发布的
+契约信息,将信息注册到内存中。
+
+## 发现过程
+
+发现过程也是从本地进行查找。因此系统需要配置本地的微服务信息和实例信息,以及契约信息。 提供了下面两种方式:
+
+* 使用配置文件的方式定义服务
+
+  这种方式从配置文件(registry.yaml)中读取服务的 `Microservice` 和 
+  `MicroserviceInstance` 信息,从目录 `microservices/{serviceName}/{schemaId}.yaml` 或者 
+  `applications/{appId}/{serviceName}/{schemaId}.yaml` 读取微服务的契约
+   信息。
+
+   registry.yaml 格式:
+
+        ```yaml
+        ms1:
+          - id: "001"
+            version: "1.0"
+            appid: exampleApp
+            environment: development
+            schemaIds:
+              - hello
+            instances:
+              - endpoints:
+                  - rest://127.0.0.1:8080
+          - id: "002"
+            version: "2.0"
+            environment: development
+            appid: exampleApp
+            schemaIds:
+              - hello
+            instances:
+              - endpoints:
+                  - rest://127.0.0.2:8080
+        ms2:
+          - id: "003"
+            version: "1.0"
+            environment: development
+            appid: exampleApp
+            schemaIds:
+              - hello
+            instances:
+              - endpoints:
+                  - rest://127.0.0.1:8081
+        ``` 
+
+  `registry.yaml` 指定了微服务的基本信息:应用ID (appId), 微服务名称 (serviceName),
+  微服务版本(version),环境(environment) 和契约;微服务实例基本信息:网络地址(endpoints)。
+  
+* 使用 `bean` 的方式定义服务
+
+        ```java
+          @Bean
+          public RegistryBean demoLocalRegistryServerBean2() {
+            List<String> endpoints = new ArrayList<>();
+            endpoints.add("rest://localhost:8080");
+            List<Instance> instances = new ArrayList<>();
+            instances.add(new Instance().setEndpoints(endpoints));
+        
+            return new RegistryBean()
+                .setServiceName("demo-local-registry-server-bean2")
+                .setId("003")
+                .setVersion("0.0.3")
+                .setAppId("demo-local-registry")
+                .addSchemaInterface("CodeFirstEndpoint2", CodeFirstService.class)
+                .setInstances(new Instances().setInstances(instances));
+          }
+        ```
+
+  `RegistryBean` 的信息和 `registry.yaml` 的信息类似, 可以添加 `Schema Interface` 来添加
+  契约信息, 如果没有添加契约信息,这种方式也会从本地配置文件查找契约。 CodeFirstService 是一个接口,
+  和普通的 provider 接口定义类似:
+  
+        @Path("/register/url/codeFirst")
+        @Produces("application/json")
+        public interface CodeFirstService {
+          @GET
+          @Path("getName")
+          String getName(@QueryParam("name") String name);
+        }
+  
+## 本地注册发现的应用 - 调用第三方服务
+
+可以有非常多的方式调用第三方服务,比如采用第三方提供的 Rest Client。 但是需要提供一种
+透明的方式,让调用第三方服务的客户端代码和调用 servicecomb 微服务的
+客户端代码风格完全一样,并且拥有所有 servicecomb 的客户端治理能力。
+
+在[调用第三方服务](../build-consumer/3rd-party-service-invoke.md)里面介绍了servicecomb提供的一种
+调用第三方服务的使用方式,这种方式依赖于使用服务中心作为注册发现。 可以看出使用本地服务发现能够非常方便的调用第三方服务。
+
+只需要在原来的项目中引入本地注册发现,按照上述两种方式之一定义第三方服务的信息。 定义完成后,可以像访问 servicecomb
+服务一样访问第三方服务,不用关心第三方服务是采用什么框架开发的。 下面代码片段来源于 demo,
+演示了通过 java chassis 的方式调用服务中心接口。
+
+```java
+public interface IServiceCenterEndpoint {
+  // java name can not be `x-domain-name`, so interfaces define all parameters.
+  @GetMapping(path = "/instances")
+  Object getInstances(@RequestParam(name = "appId") String appId,
+      @RequestParam(name = "serviceName") String serviceName,
+      @RequestParam(name = "global") String global,
+      @RequestParam(name = "version") String version,
+      @RequestHeader(name = "x-domain-name") String domain);
+}
+
+@Component
+public class ServiceCenterTestCase implements CategorizedTestCase {
+  @RpcReference(microserviceName = "thirdParty-service-center", schemaId = "ServiceCenterEndpoint")
+  IServiceCenterEndpoint serviceCenterEndpoint;
+
+  @Override
+  public void testRestTransport() throws Exception {
+    // invoke service-center(3rd-parties)
+    @SuppressWarnings("unchecked")
+    Map<String, List<?>> result = (Map<String, List<?>>) serviceCenterEndpoint.getInstances(
+        "demo-multi-registries",
+        "demo-multi-registries-server",
+        "true",
+        "0.0.2",
+        "default");
+    TestMgr.check(result.get("instances").size(), 1);
+  }
+}
+```
+
+
+
diff --git a/java-chassis-reference/zh_CN/docs/registry/multi-registries.md b/java-chassis-reference/zh_CN/docs/registry/multi-registries.md
index d63eced..1dcc9d8 100644
--- a/java-chassis-reference/zh_CN/docs/registry/multi-registries.md
+++ b/java-chassis-reference/zh_CN/docs/registry/multi-registries.md
@@ -1,155 +1,4 @@
-# 组合使用多个实现
-
-通过组合多个服务注册发现实现,能够满足很多特殊场景的开发要求。 
-
-***注意:*** 组合使用多个实现,必须使用 2.1.0 及其以上版本。 
-
-## 调用第三方服务
-
-可以有非常多的方式调用第三方服务,比如采用第三方提供的Rest Client。 但是需要提供一种
-透明的方式,让调用第三方服务的客户端代码和调用 servicecomb 微服务的
-客户端代码风格完全一样,并且拥有所有 servicecomb 的客户端治理能力。
-
-在[调用第三方服务](../build-consumer/3rd-party-service-invoke.md)里面介绍了servicecomb提供的一种
-调用第三方服务的使用方式,这种方式依赖于使用服务中心作为注册发现。 下面介绍一种组合使用服务中心和本地注册发现,
-实现调用第三方服务。 在本方案中,第三方调用是通过本地注册发现实现的,java chassis 微服务之间是通过服务中心
-实现的。可以看出,使用本地注册发现实现,比原来的第三方调用方案功能更加完善,开发更加灵活。
-
-* 首先在项目中引入两种注册发现的实现
-
-```xml
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>registry-local</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicecomb</groupId>
-      <artifactId>registry-service-center</artifactId>
-    </dependency>
-```
-
-* 在 `registry.yaml` 中定义第三方的微服务信息
-
-```yaml
-thirdParty-service-center:
-  - id: "001"
-    version: "4.0.0"
-    appid: demo-multi-registries
-    schemaIds:
-      - ServiceCenterEndpoint
-    instances:
-      - endpoints:
-          - rest://localhost:30100
-```
-
-* 注册契约。 与开发服务接口一样, 调用第三方服务也可以采用 `Core First` 
-  或者 `Contrast First` 两种方式注册契约。 
-
-    * Code First 方式注册契约
-  
-      需要在服务启动完成后(`AFTER_REGISTRY`事件), 调用接口完成契约注册。 
-  
-            @RequestMapping(path = "/v4/default/registry", produces = MediaType.APPLICATION_JSON)
-            public interface IServiceCenterEndpoint {
-              // java name can not be `x-domain-name`, so interfaces define all parameters.
-              @GetMapping(path = "/getInstances")
-              Object getInstances(@RequestParam(name = "appId") String appId,
-                  @RequestParam(name = "serviceName") String serviceName,
-                  @RequestParam(name = "global") String global,
-                  @RequestParam(name = "version") String version,
-                  @RequestHeader(name = "x-domain-name") String domain);
-            }
-         
-             RegistrationManager.INSTANCE.getSwaggerLoader().registerSwagger(
-                    "demo-multi-registries",
-                    "thirdParty-service-center",
-                    "ServiceCenterEndpoint", IServiceCenterEndpoint.class);
-
-    * Contrast First 方式注册契约
-  
-      在 `microservices/thirdParty-service-center/ServiceCenterEndpoint.yaml` 中定义契约内容
-
-            ```yaml
-            swagger: "2.0"
-            info:
-              version: "1.0.0"
-              title: "swagger definition for org.apache.servicecomb.demo.registry.ServiceCenterEndpoint"
-              x-java-interface: "gen.swagger.ServiceCenterEndpointIntf"
-            basePath: "/v4/default/registry"
-            schemes:
-              - "http"
-            consumes:
-              - "application/json"
-            produces:
-              - "application/json"
-            paths:
-              /instances:
-                get:
-                  operationId: "getInstances"
-                  parameters:
-                    - name: "appId"
-                      in: "query"
-                      required: true
-                      type: "string"
-                    - name: "serviceName"
-                      in: "query"
-                      required: true
-                      type: "string"
-                    - name: "global"
-                      in: "query"
-                      required: true
-                      type: "string"
-                    - name: "version"
-                      in: "query"
-                      required: true
-                      type: "string"
-                    - name: "x-domain-name"
-                      in: "header"
-                      required: true
-                      type: "string"
-                  responses:
-                    "200":
-                      description: "response of 200"
-                      schema:
-                        type: "object"
-            ```
-
-
-* 经过上面的准备,就可以像访问 servicecomb 的微服务一样访问第三方服务了。 比如采用 RPC 的方式访问这个
- 服务的代码如下:
- 
-```java
-public interface IServiceCenterEndpoint {
-  // java name can not be `x-domain-name`, so interfaces define all parameters.
-  @GetMapping(path = "/instances")
-  Object getInstances(@RequestParam(name = "appId") String appId,
-      @RequestParam(name = "serviceName") String serviceName,
-      @RequestParam(name = "global") String global,
-      @RequestParam(name = "version") String version,
-      @RequestHeader(name = "x-domain-name") String domain);
-}
-
-@Component
-public class ServiceCenterTestCase implements CategorizedTestCase {
-  @RpcReference(microserviceName = "thirdParty-service-center", schemaId = "ServiceCenterEndpoint")
-  IServiceCenterEndpoint serviceCenterEndpoint;
-
-  @Override
-  public void testRestTransport() throws Exception {
-    // invoke service-center(3rd-parties)
-    @SuppressWarnings("unchecked")
-    Map<String, List<?>> result = (Map<String, List<?>>) serviceCenterEndpoint.getInstances(
-        "demo-multi-registries",
-        "demo-multi-registries-server",
-        "true",
-        "0.0.2",
-        "default");
-    TestMgr.check(result.get("instances").size(), 1);
-  }
-}
-```
-
-## 连接多个服务中心
+# 连接多个服务中心
 
 有些应用场景需要连接多个服务中心。比如一个应用系统会在不同的 region 部署,其中一个 region 的服务需要访问
 另外一个 region 的服务, 这个时候,可以连接另外 region 的服务中心,发现服务信息。 
diff --git a/java-chassis-reference/zh_CN/docs/toc.md b/java-chassis-reference/zh_CN/docs/toc.md
index 335728f..6d4c10b 100644
--- a/java-chassis-reference/zh_CN/docs/toc.md
+++ b/java-chassis-reference/zh_CN/docs/toc.md
@@ -70,8 +70,9 @@
     * [HTTP2](transports/http2.md)
 * 管理注册发现:
     * [注册发现说明](registry/introduction.md)
+    * [本地注册发现](registry/local-registry.md)
     * [去中心化注册发现](registry/distributed.md)
-    * [组合使用多个实现](registry/multi-registries.md)
+    * [连接多个服务中心](registry/multi-registries.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 acffdf4..6af30a0 100644
--- a/java-chassis-reference/zh_CN/mkdocs.yml
+++ b/java-chassis-reference/zh_CN/mkdocs.yml
@@ -17,8 +17,9 @@ nav:
     - HTTP2: transports/http2.md
 - 管理注册发现:
     - 注册发现说明: registry/introduction.md
+    - 本地注册发现: registry/local-registry.md
     - 去中心化注册发现: registry/distributed.md
-    - 组合使用多个实现: registry/multi-registries.md
+    - 连接多个服务中心: registry/multi-registries.md
 - 管理服务配置:
     - 通用配置说明: config/general-config.md
     - 配置注入机制: config/inject-config.md