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