Spring-Cloud系列 Eureka (一)

什么是Eureka?

  Eureka是一个服务发现组件。所谓的服务发现就是将服务的调用者和被调用者者,都注册到一个第三方应用上。调用者在调用服务时可以清楚的知道被调用服务的状态。如果大家用过ZooKeeper就能很好的理解服务发现的原理。Eureka也如ZooKepper一般由service和client两部分组成。


Eureka-Clients

添加依赖


    org.springframework.boot
    spring-boot-starter-parent
    1.5.13.RELEASE
     



    UTF-8
    UTF-8
    1.8
    Edgware.SR3



    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.cloud
        spring-cloud-starter-eureka
    

    
        org.springframework.boot
        spring-boot-starter-test
        test
    



    
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
    



    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    

Client端代码

@RestController  //Spring-Boot
@EnableEurekaClient //EurekaClient 
@SpringBootApplication
public class EurekaClientApplication {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

    我们在上述代码上用了@EnableEurekaClient这个注解,在Spring-Cloud除了这个注解还可以用@EnableDiscoveryClient。那么这两个注解有啥区别呢?@EnableEurekaClient表明这个是EurekaClient,@EnableDiscoveryClient则是标记一个服务发现客户端。这个可户端可以是ZK-Client,也可以EurekaClient

application配置

server:


  port: 8080


spring:


  application:


    name: eureka-client-one #建议小写,eureka默认注册节点是会将应用名称大写。


eureka:


  client:


    serviceUrl:


      defaultZone: http://localhost:8761/eureka

启动效果

Spring-Cloud系列 Eureka (一)_第1张图片
查看启动结果

Eureka-Service

添加依赖


    org.springframework.boot
    spring-boot-starter-parent
    1.5.13.RELEASE
     



    UTF-8
    UTF-8
    1.8
    Dalston.SR5



    
        org.springframework.cloud
        spring-cloud-starter-eureka-server
    

    
        org.springframework.boot
        spring-boot-starter-test
        test
    



    
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
    



    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    

服务端代码

@EnableEurekaServer //EurekaServer
@SpringBootApplication
public class EurekaServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServiceApplication.class, args);
    }
}

配置文件

server:


  port: 8761


eureka:


  instance:


  #实例主机名#


    hostname: localhost


  client:

    #是否需要多机拷贝#


    register-with-eureka: false


    fetch-registry: false

    #本机服务地址#

    service-url:


      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动后效果

Spring-Cloud系列 Eureka (一)_第2张图片
启动效果

重要参数解释

重要参数解释

修改Instance-ID

    我们在看上面实例状态时,状态栏给出的默认Instance-ID信息不是特别直观,我们有什么方式可以改呢?

eureka:

  instance:

    #开启地址显示

    prefer-ip-address: true

    instanceId:${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
#此修改要在Eureka-Client上修改



    默认定义:


Spring-Cloud系列 Eureka (一)_第3张图片
默认效果



    修改后效果:


Spring-Cloud系列 Eureka (一)_第4张图片
修改后效果

Eureka开启安全验证和健康检查

安全验证

添加依赖



    org.springframework.boot
    spring-boot-starter-security

    注意!如果不添加依赖直接进行配置项目启动时不报错的。

配置文件

security:

  #开启eureka权限控制

  basic:

    enabled: true

  #设定访问用户和密码

  user:

    name: user

    password: Pass123456

#在Eureka-Server配置

注意!改完上述配置后Server和Client的下述配置都需要修改:

eureka:

  client:

    service-url:


      #此种风格是CURL的配置模式

      defaultZone: http://user:Pass123456@localhost:8761/eureka

配置效果

Spring-Cloud系列 Eureka (一)_第5张图片
安全验证

健康检查配置

添加依赖



    org.springframework.boot
    spring-boot-starter-actuator

添加配置

eureka:

  client:

    healthcheck:

      enabled: true

注意事项

    老版本的Spring-Cloud配置完以上的就可以,访问一些healthcheck的接口了。如果你访问/env等路路径出现:


Spring-Cloud系列 Eureka (一)_第6张图片
权限问题

需要做以下配置:

management:

  security:

    enabled: false

配置效果

Spring-Cloud系列 Eureka (一)_第7张图片
健康检查

其他相关配置

剔除过期等不健康实例(生产环境不建议使用)

服务端:

  #关闭注册中心自我保护机制

  eureka:

    server:

      enable-self-preservation:false

  #注册中心清理间隔(单位毫秒,默认60*1000)

  eureka:

    server:

      eviction-interval-timer-in-ms:10000


客户端:

  #租期更新时间间隔(默认30秒)

  eureka:

    instance:

      lease-renewal-interval-in-seconds=10

  #租期到期时间(默认90秒)

  eureka:

    instance:

      lease-expiration-duration-in-seconds=15

Eureka的自我保护模式

    如果在Eureka Server的首页看到以下这段提示,则说明Eureka已经进入了保护模式:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

    一般出现此模式时,服务返回错误。即如果真实的服务已经Down掉,但在注册中心界面服务却一直存在,且显示为UP状态。

产生原因

Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。

EurekaClient端代码获取实例信息

@Autowired
private EurekaClient discoveryClient;

public String serviceUrl() {
    InstanceInfo instance = discoveryClient.getNextServerFromEureka("STORES",  false);
    return instance.getHomePageUrl();
}

Netflix-EurekaClient端代码获取实例信息

@Autowired
private EurekaClient discoveryClient;

public String serviceUrl() {
    InstanceInfo instance = discoveryClient.getNextServerFromEureka("STORES", false);
    return instance.getHomePageUrl();
}

不要在@PostConstruct方法或@Scheduled方法中(或ApplicationContext可能尚未启动的任何地方)使用EurekaClient。

客户端常用配置,均以eureka.client为前缀####













































































































参数名 说明 默认值
enabled 启用Eureka客户端 true
registryFetchIntervalSeconds 从Eureka服务端获取注册信息的间隔时间,单位为秒 30
instanceInfoReplicationIntervalSeconds 更新实例信息的变化到Eureka服务端的间隔时间,单位为秒 30
initialInstanceInfoReplicationIntervalSeconds 初始化实例信息到Eureka服务端的间隔时间,单位为秒 40
eurekaServiceUrlPollIntervalSeconds 轮询Eureka服务端地址更改的间隔时间,单位为秒。当我们与Spring CLoud Config整合,动态刷新Eureka的serviceURL地址时需要关注该参数 300
eurekaServerReadTimeoutSeconds 读取Eureka Server信息的超时时间,单位为秒 8
eurekaServerConnectTimeoutSeconds 链接Eureka Server的超时时间,单位为秒 5
eurekaServerTotalConnections 从Eureka客户端到所有Eureka服务端的连接总数 200
eurekaServerTotalConnectionsPerHost 从Eureka客户端到每个Eureka服务端主机的连接总数 50
eurekaConnectionIdleTimeoutSeconds Eureka服务端连接的空闲关闭时间,单位为秒 30
heartbeatExecutorThreadPoolSize 心跳连接池的初始化线程数 2
heartbeatExecutorExponentialBackOffBound 心跳超时重试延迟时间的最大乘数值 10
cacheRefreshExecutorThreadPoolSize 缓存刷新线程池的初始化线程数 2
cacheRefreshExecutorExponentialBackOffBound 缓存刷新重试延迟时间的最大乘数值 10
useDnsForFetchingServiceUrls 使用DNS来获取Eureka服务端的serviceUrl false
registerWithEureka 是否要将自身的实例信息注册到Eureka服务端 true
preferSameZoneEureka 是否偏好使用处于相同Zone的Eureka服务端 true
filterOnlyUpInstances 获取实例时是否过滤,仅保留UP状态的实例 true
fetchRegistry 是否从Eureka服务端获取注册信息 true
serviceUrl 指定注册中心 http://:@localhost:1111/eureka

    本文参考:Spring-Cloud-Eureka-DOC
,springboot-actuator监控的401,Eureka客户端服务端配置

你可能感兴趣的:(Spring-Cloud系列 Eureka (一))