去中心化注册发现指不通过服务中心中间件,实现服务注册发现。去中心化注册发现比较适合于小规模管理面服务的开发,或者 对于弹性扩缩容要求不高的场景。 servicecomb 提供了两种方式满足去中心化的注册发现。这两种方式涉及如下模块:
通过组合本地注册发现和实例契约发现能够实现去中心化注册发现。这种场景需要 consumer 配置 provider 的地址信息, 适合 provider 地址固定的场景。 或者在容器部署的场景(比如 Istio), consumer 可以通过固定的服务名访问 provider, 采用这种注册发现方式能够很好利用容器的发现能力。
通过组合本地注册发现和实例契约发现包含下面几个开发步骤:
引入相关依赖
```xml <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>registry-schema-discovery</artifactId> </dependency> ```
备注: registry-schema-discovery 依赖于 registry-local
在 consumer 的 registry.yaml
中配置 provider 的微服务和微服务实例信息
demo-zeroconfig-schemadiscovery-registry-edge: - id: "002" version: "0.0.2" appid: demo-zeroconfig-schemadiscovery-registry schemaIds: - ClientServerEndpoint - SchemaDiscoveryEndpoint instances: - endpoints: - rest://localhost:8888
组播注册发现采用UDP协议发现实例。使用这种方式只需要在项目中配置依赖:
<dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>registry-schema-discovery</artifactId> </dependency> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>registry-zero-config</artifactId> </dependency>
可以看出使用这种方式非常简单,也是 zero-config 名称的由来。
使用去中心化注册发现,一般会去掉集中注册发现模块的依赖。 如果没去掉依赖,就会存在多种注册发现并存的情况。这种 情况的行为可以参考注册发现概述的内容。