@EnableDiscoveryClient 是 Spring Cloud 提供的注解,它的作用是:

  • 启用服务发现功能:在 Spring Cloud 应用中,添加 @EnableDiscoveryClient 注解后,当前服务就能够向服务注册中心注册自己。
  • 激活 DiscoveryClient:Spring Cloud 会自动配置一个 DiscoveryClient 的实现,这个实现可以是针对不同注册中心的具体实现,比如 Eureka、Nacos 等。
  • 注册到服务注册中心:当服务启动时,它会将自己的信息注册到指定的服务注册中心。
  • 服务发现:服务可以通过 DiscoveryClient 或者其他相关的 API 访问服务注册中心,动态地获取其他服务的信息,进行远程调用。

配置服务中心

假设我们在使用 Nacos 作为服务注册中心,可以按照以下步骤来启用服务发现:

  1. 添加依赖pom.xml 中添加 Nacos 的 Spring Cloud 客户端依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 启用 @EnableDiscoveryClient 注解 在主类上添加 @EnableDiscoveryClient 注解,表示启用服务发现功能:
@SpringBootApplication
@EnableDiscoveryClient  // 启用服务发现功能
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
  1. 配置 Nacos 服务注册中心application.propertiesapplication.yml 文件中配置 Nacos 注册中心的地址和相关参数:
spring:
  application:
    name: my-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  # Nacos 服务地址
        namespace: public            # 设置命名空间(可选)
  1. 使用 DiscoveryClient 进行服务发现 假设 service-A 需要调用 service-B,可以通过以下方式来获取 service-B 的实例信息:
@Autowired
private DiscoveryClient discoveryClient;
 
public void discoverService() {
    // 获取名为 "service-B" 的服务实例列表
    List<ServiceInstance> instances = discoveryClient.getInstances("service-B");
    if (instances != null && !instances.isEmpty()) {
        String serviceUrl = instances.get(0).getUri().toString();  // 获取第一个实例的 URL
        // 使用 serviceUrl 进行调用
    }
}