-
Notifications
You must be signed in to change notification settings - Fork 492
Multi registration and multi discovery
Haotian Zhang edited this page Apr 13, 2023
·
16 revisions
当使用者想要使用多个服务注册中心,或者是想从其他注册中心平滑迁移到 Polaris 时,一种实现方式是在客户端侧多注册多发现。为了实现多注册多发现的能力,同时尽可能的对业务无侵入,polaris-java-sdk 封装了多注册多发现的功能,使用者可以轻松地实现该场景。
目前仅支持 Polaris 与 Consul / Nacos 的多注册和多发现。
如上图所示,polaris-java-sdk
实现了多注册多发现的能力,业务应用只需对接 Polaris 的服务发现能力即可。Polaris 可以同时对 Consul 或者 Nacos 进行多注册和多发现。因此,需要增加其他注册中心的相关配置以建立注册发现连接。
如果您的项目里依赖了 spring-cloud-starter-consul-discovery
,则需要删除依赖,否则会导致应用启动失败。启动失败日志如下:
***************************
APPLICATION FAILED TO START
***************************
Description:
Field autoServiceRegistratihaiyon in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found:
- polarisAutoServiceRegistration: defined by method 'polarisAutoServiceRegistration' in class path resource [com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.class]
- consulAutoServiceRegistration: defined by method 'consulAutoServiceRegistration' in class path resource [org/springframework/cloud/consul/serviceregistry/ConsulAutoServiceRegistrationAutoConfiguration.class]
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>connector-consul</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>${version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
</dependency>
</dependencies>
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>connector-consul</artifactId>
</dependency>
- 配置完整的
spring cloud polaris discovery
配置 - 配置完整的
spring cloud consul discovery
配置,注意需要打开所有的开关,包括:- spring.cloud.consul.enabled
- spring.cloud.consul.discovery.register
- spring.cloud.consul.discovery.enabled
一份完整配置的样例如下所示:
spring:
application:
name: DiscoveryCalleeService
cloud:
polaris:
address: grpc://127.0.0.1:8091 # 需修改为真实的 Polaris 服务地址
discovery:
ip-address: 127.0.0.1
consul:
port: 8500
host: 127.0.0.1
enabled: true # 需要打开
discovery:
register: true # 需要打开
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
enabled: true # 需要打开
service-name: ${spring.application.name}
ip-address: localhost
prefer-ip-address: true
配置项Key | 默认值 | 是否必填 | 配置项说明 |
---|---|---|---|
spring.cloud.consul.host | 无 | 是 | Consul后端地址 |
spring.cloud.consul.port | 无 | 是 | Consul端口号 |
spring.cloud.consul.enabled | true | 否 | 是否启用Consul |
spring.cloud.consul.discovery.enabled | true | 否 | 是否启用Consul服务发现 |
spring.cloud.consul.discovery.register | true | 否 | 是否启用Consul服务注册 |
spring.cloud.consul.discovery.service-name | ${spring.application.name} | 否 | 注册服务名 |
spring.cloud.consul.discovery.instance-id | 服务名-IP-端口号 | 否 | 注册实例ID |
spring.cloud.consul.discovery.prefer-ip-address | false | 否 | 是否使用自定义IP注册 |
spring.cloud.consul.discovery.ip-address | 无 | 否 | 自定义注册IP |
如果您的项目里依赖了 Nacos 相关,则需要删除依赖,否则会导致应用启动失败。
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>connector-nacos</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-tencent-dependencies</artifactId>
<version>${version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloud</groupId>
<artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
</dependency>
</dependencies>
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>connector-nacos</artifactId>
</dependency>
- 配置完整的
spring cloud polaris discovery
配置 - 配置完整的
spring cloud nacos discovery
配置,注意需要打开所有的开关,包括:- spring.cloud.nacos.enabled
- spring.cloud.nacos.discovery.enabled
- spring.cloud.nacos.discovery.register-enabled
一份完整配置的样例如下所示:
spring:
application:
name: DiscoveryCalleeService
cloud:
polaris:
address: grpc://127.0.0.1:8091 # 需修改为真实的 Polaris 服务地址
discovery:
ip-address: 127.0.0.1
nacos:
enabled: true
discovery:
server-addr: 127.0.0.1:8848
enabled: true
register-enabled: true
username: nacos
password: nacos
group: polaris
cluster-name: DEFAULT
配置项Key | 默认值 | 是否必填 | 配置项说明 |
---|---|---|---|
spring.cloud.nacos.enabled | true | 否 | 是否启用 Nacos |
spring.cloud.nacos.discovery.server-addr | 无 | 是 | Nacos 后端地址 |
spring.cloud.nacos.discovery.enabled | true | 否 | 是否启用 Nacos 服务发现 |
spring.cloud.nacos.discovery.register-enabled | true | 否 | 是否启用 Nacos 服务注册 |
spring.cloud.nacos.discovery.username | 无 | 否 | 用户名 |
spring.cloud.nacos.discovery.password | 无 | 否 | 密码 |
spring.cloud.nacos.discovery.group | DEFAULT_GROUP | 否 | 服务分组 |
spring.cloud.nacos.discovery.cluster-name | DEFAULT | 否 | 集群名称 |
- 您在使用过程中遇到任何问题,请提 Issue 或者加入我们的开发者群告诉我们,我们会在第一时间反馈
- Spring Cloud Tencent 社区期待您的加入,一个 Star、PR 都是对我们最大的支持
- 项目介绍
- 使用指南
- 最佳实践
- 开发文档
- 学习资料