Spring Cloud Edgware新特性之七:可选的EnableDiscoveryClient注解


回到Spring Cloud——

相信熟悉Spring Cloud的读者对注解​​@EnableDiscoveryClient​​​ 及​​@EnableEurekaClient​​ 并不陌生。简单回顾一下——

要想将一个微服务注册到Eureka Server(或其他服务发现组件,例如Zookeeper、Consul等),只需:



添加Eureka Client(或其他服务发现组件的Client)依赖:

1
2
3
4


<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>




写注解:在启动类上添加注解@EnableDiscoveryClient 或@EnableEurekaClient

1
2
3
4
5
6
7


@EnableDiscoveryClient
@SpringBootApplication
public class ProviderUserApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderUserApplication.class, args);
}
}




写配置:

1
2
3
4
5
6
7


http%3A%2F%2Flocalhost%3A8761%2Feureka%2F%22%2C%22id%22%3A%22kF2iX%22%2C%22type%22%3A%22block%22%7D" data-card-type="block" data-card-key="codeblock" data-id="d3921570-Ae2YN5Jj" data-card-editable="false">
xxxxxxxxxx
 
1
spring:
2
  application:
3
    name: microservice-provider-user
4
eureka:
5
  client:
6
    serviceUrl:
7
      defaultZone: http://localhost:8761/eureka/


从Spring Cloud Edgware开始,@EnableDiscoveryClient 或@EnableEurekaClient 可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。



分析

文章写到这里,Edgware新特性已经结束了。

但Spring Cloud为什么要这么设计/改进呢?

这是由于在实际项目中,我们可能希望实现“不同环境不同配置”的效果——例如:在开发环境中,不注册到Eureka Server上,而是服务提供者、服务消费者直连,便于调测;在生产环境中,我们又希望能够享受服务发现的优势——服务消费者无需知道服务提供者的绝对地址。为适应该需求,Spring Cloud Commons进行了改进,相关

如不想将服务注册到Eureka Server,只需设置​​spring.cloud.service-registry.auto-registration.enabled=false​​​ ,或​​@EnableDiscoveryClient(autoRegister = false)​​ 即可。