Fork me on GitHub

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

最近家里事情比较多,有20天没有更新博客了。12月31日早上,老婆突然肚子疼,然后就去医院了。在经过难熬的28个小时之后,老婆早产生了个小姑娘。之后就一直奔波在家、医院,直至今日。昨晚凌晨,姑娘突然大便出血,又住院了……南京几个医院的新生儿科都不让陪护,只有周一周四才能看到。

姑娘是个非常乖的宝宝,在家不哭不闹,饿了就吃,吃了就睡,睡醒就拉,拉完接着吃。送到医院给医生洗了个澡就大哭不止。但是没有办法,有病总得治,只能听医生的了。从生老大开始,我就开始跟医院有矛盾。如果把中间的细节描绘一下,大致可以成书。绝对狗血,并且比《Spring Cloud与Docker微服务架构实战》那本精彩,评分高。

话说我家的娃们跟过年大致都有点关系——

  • 老大农历初二生的
  • 老二元旦生的

希望他们的人生像过年一样无忧无虑、吃穿不愁。原本我想写富足,但是富足往往是父母赐给的,以我目前的实力,给他们许诺“富足”还很遥远。

言归正传,回到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
    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) 即可。

评论系统未开启,无法评论!