一、Eureka客户端

1.1 导入依赖

下面是导入一个Eureka客户端的示例:

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  5. </dependency>
  6. ...
  7. </dependencies>

1.2 注册

当一个客户端注册至Eureka,会向Eureka提供关于自己的一些元数据,例如主机名、端口、健康指示器URL、主页或者其他信息。Eureka从属于服务的每个示例接收心跳消息,如果心跳失败超过一个配置好的时刻表,那么这个示例将会从注册表中移除。

1.2.1 基础示例

下面的示例是一个最简单的Eureka客户端:

  1. @SpringBootApplication
  2. @RestController
  3. public class Application {
  4. @RequestMapping("/")
  5. public String home() {
  6. return "Hello world";
  7. }
  8. public static void main(String[] args) {
  9. new SpringApplicationBuilder(Application.class).web(true).run(args);
  10. }
  11. }

要注意上面的示例属于一个正常的SpringBoot应用,在类路径中需要有spring-cloud-starter-netflix-eureka-client,你的应用将会自动注册到Eureka的服务端,定位Eureka服务的配置是必须要有的!

1. 客户端配置信息

a. 服务端地址配置

一个简单的配置示例如下:

  1. eureka:
  2. client:
  3. serviceUrl:
  4. defaultZone: http://localhost:8761/eureka/
  1. 其中,`defaultZone`是一个有默认值的魔法字符串,他为任何不指定特定值的客户端提供一个服务地址。<br />注意:

:::info defaultZone属性是 大小写敏感 且 需要驼峰式大小写 的,因为serviceUrl是一个Map类型的的字段,因此,defaultZone不支持正常的SpringBoot蛇形转换为default-zone。 :::

b. 服务名相关配置

默认的应用名(服务ID),虚拟主机名,非安全端口,都是从Spring环境中获取,分别是${spring.application.name}${spring.application.name}${server.port}
类路径中的spring-cloud-starter-netflix-eureka-client会使应用既作为一个Eureka示例(自己注册自己),又作为一个“客户端”(它可以查询注册表来定位其他服务)。这种示例行为是由配置键eureka.instance.*驱动的。
但如果你的spring.application.name配置(默认Eureka服务ID)是有值的,那么上述配置的默认值也可满足使用需求。

c. 禁用客户端配置

如果想要禁用Eureka客户端,你可以设置eureka.client.enabled配置为false。或者当spring.cloud.discovery.enabled设置为false也可以使其禁用。

1.3 使用Eureka服务器进行身份认证

1.3.1 用户名密码验证

如果在eureka.client.serviceUrl.defaultZone中嵌入了认证信息,那么HTTP 基本身份验证会自动添加到你的Eureka客户端,例如:
[user:password@localhost:8761/eureka](https://user:password@localhost:8761/eureka)
对于更加复杂的需求,你可以创建一个DiscoveryClientOptionalArgs的Bean,并将ClientFilter注入到其中,所有的这些配置都会应用到从客户端到服务端的调用当中。

1.3.2 证书及信任库验证

当 Eureka 服务器需要客户端证书进行身份验证时,可以通过属性配置客户端证书和信任库,如下例所示:

  1. eureka:
  2. client:
  3. tls:
  4. enabled: true
  5. key-store: <path-of-key-store>
  6. key-store-type: PKCS12
  7. key-store-password: <key-store-password>
  8. key-password: <key-password>
  9. trust-store: <path-of-trust-store>
  10. trust-store-type: PKCS12
  11. trust-store-password: <trust-store-password>
  1. `eureka.client.tls.enabled`:启用Eureka客户端 TLS的必要性是真实的。<br />`eureka.client.tls.trust-store`:配置如果省略的话,则使用JVM默认的信任库。<br />`eureka.client.tls.key-store-type``eureka.client.tls.trust-store-type`的默认值是`PKCS12`。<br />如果省略密码属性,则假定密码为空。<br />由于 Eureka 的限制,不可能支持每个服务器的基本身份验证凭据,因此仅使用找到的第一组。<br />如果您想自定义 Eureka HTTP 客户端使用的 RestTemplate,您可能需要创建一个 bean`EurekaClientHttpRequestFactorySupplier`并提供您自己的逻辑来生成`ClientHttpRequestFactory`实例。

1.4 健康检查

默认情况下,Eureka使用客户端的心跳来决定客户端是否还正常运行。除非做特别指定,服务发现客户端不会根据SpringBoot的检测器来传播应用的当前健康状态检查情况。因此,每当一个应用成功注册以后,Eureka都会声明这个服务是正常的状态。
上述行为可以通过开启Eureka检查检查来改变,从而将应用的状态传播给Eureka。这样的话,每一个应用就不会再发送消息到状态不是“UP”的应用去。
下面是如何配置开启客户端健康检查的示例:

  1. eureka:
  2. client:
  3. healthcheck:
  4. enabled: true
  1. 注意:上述配置只能在`application.yml`中配置使用,如果在`bootstrap.yml`可能会导致不可描述的负面影响,比如以`UNKNOWN`状态注册到Eureka中。

二、Eureka服务端