Spring Cloud Edgware新特性之七:可选的EnableDiscoveryClient注解
http://www.itmuch.com/spring-cloud/edgware-new-optional-enable-discovery-client/
回到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 -
写配置:
1
2
3
4
5
6
7spring:
application:
name: microservice-provider-user
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/从Spring Cloud Edgware开始,
@EnableDiscoveryClient
或@EnableEurekaClient
可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。
分析
文章写到这里,Edgware新特性已经结束了。
但Spring Cloud为什么要这么设计/改进呢?
这是由于在实际项目中,我们可能希望实现“不同环境不同配置”的效果——例如:在开发环境中,不注册到Eureka Server上,而是服务提供者、服务消费者直连,便于调测;在生产环境中,我们又希望能够享受服务发现的优势——服务消费者无需知道服务提供者的绝对地址。为适应该需求,Spring Cloud Commons进行了改进,相关Issue:https://github.com/spring-cloud/spring-cloud-commons/issues/218 。
如不想将服务注册到Eureka Server,只需设置spring.cloud.service-registry.auto-registration.enabled=false
,或@EnableDiscoveryClient(autoRegister = false)
即可。