最近家里事情比较多,有20天没有更新博客了。12月31日早上,老婆突然肚子疼,然后就去医院了。在经过难熬的28个小时之后,老婆早产生了个小姑娘。之后就一直奔波在家、医院,直至今日。昨晚凌晨,姑娘突然大便出血,又住院了……南京几个医院的新生儿科都不让陪护,只有周一周四才能看到。
姑娘是个非常乖的宝宝,在家不哭不闹,饿了就吃,吃了就睡,睡醒就拉,拉完接着吃。送到医院给医生洗了个澡就大哭不止。但是没有办法,有病总得治,只能听医生的了。从生老大开始,我就开始跟医院有矛盾。如果把中间的细节描绘一下,大致可以成书。绝对狗血,并且比《Spring Cloud与Docker微服务架构实战》那本精彩,评分高。
话说我家的娃们跟过年大致都有点关系——
- 老大农历初二生的
- 老二元旦生的
希望他们的人生像过年一样无忧无虑、吃穿不愁。原本我想写富足,但是富足往往是父母赐给的,以我目前的实力,给他们许诺“富足”还很遥远。
言归正传,回到Spring Cloud——
相信熟悉Spring Cloud的读者对注解@EnableDiscoveryClient
及@EnableEurekaClient
并不陌生。简单回顾一下——
要想将一个微服务注册到Eureka Server(或其他服务发现组件,例如Zookeeper、Consul等),只需:
-
添加Eureka Client(或其他服务发现组件的Client)依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
写注解:在启动类上添加注解
@EnableDiscoveryClient
或@EnableEurekaClient
@EnableDiscoveryClient @SpringBootApplication public class ProviderUserApplication { public static void main(String[] args) { SpringApplication.run(ProviderUserApplication.class, args); } }
-
写配置:
spring: 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)
即可。