一、Eureka客户端
1.1 导入依赖
下面是导入一个Eureka客户端的示例:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
...
</dependencies>
1.2 注册
当一个客户端注册至Eureka,会向Eureka提供关于自己的一些元数据,例如主机名、端口、健康指示器URL、主页或者其他信息。Eureka从属于服务的每个示例接收心跳消息,如果心跳失败超过一个配置好的时刻表,那么这个示例将会从注册表中移除。
1.2.1 基础示例
下面的示例是一个最简单的Eureka客户端:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
要注意上面的示例属于一个正常的SpringBoot应用,在类路径中需要有spring-cloud-starter-netflix-eureka-client
,你的应用将会自动注册到Eureka的服务端,定位Eureka服务的配置是必须要有的!
1. 客户端配置信息
a. 服务端地址配置
一个简单的配置示例如下:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
其中,`defaultZone`是一个有默认值的魔法字符串,他为任何不指定特定值的客户端提供一个服务地址。<br />注意:
:::info
defaultZone属性是 大小写敏感 且 需要驼峰式大小写 的,因为serviceUrl是一个Map
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 服务器需要客户端证书进行身份验证时,可以通过属性配置客户端证书和信任库,如下例所示:
eureka:
client:
tls:
enabled: true
key-store: <path-of-key-store>
key-store-type: PKCS12
key-store-password: <key-store-password>
key-password: <key-password>
trust-store: <path-of-trust-store>
trust-store-type: PKCS12
trust-store-password: <trust-store-password>
`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”的应用去。
下面是如何配置开启客户端健康检查的示例:
eureka:
client:
healthcheck:
enabled: true
注意:上述配置只能在`application.yml`中配置使用,如果在`bootstrap.yml`可能会导致不可描述的负面影响,比如以`UNKNOWN`状态注册到Eureka中。