【Spring Cloud】Eureka端点&集群&安全认证

3.8、Rest端点

常用的 Eureka REST API 除了 /eureka/apps 之外,还有如下接口:

操作http 动作接口描述
注册新的应用实例POST/eureka/apps/{APP_NAME}可以输入 json 或者 xml 格式的 body,成功返回 204
注销实例DELETE/eureka/apps/{APP_NAME}/{INSTANCEINFO_ID}成功返回 200
发送心跳PUT/eureka/apps/{APP_NAME}/{INSTANCEINFO_ID}成功返回 200,instanceId 不存在返回 404
查询所有实例GET/eureka/apps成功返回 200,输出 json 或 xml 格式的 body
查询单个实例GET/eureka/apps/{APP_NAME}成功返回 200,输出json 或 xml 格式的 body
根据 appName、instanceId 查询GET/eureka/apps/{APP_NAME}/{INSTANCEINFO_ID}成功返回 200,输出 json 或 xml 格式的 body
暂停某个实例PUT/eureka/apps/{APP_NAME}/{INSTANCEINFO_ID}/status?value=OUT_OF_SERVICE成功返回 200,失败返回 500
恢复某个实例DELETE/eureka/apps/{APP_NAME}/{INSTANCEINFO_ID}/status?vlaue=UP(value 可不传)成功返回 200,失败返回 500
更新元数据PUT/euerka/apps/{APP_NAME}/{INSTANCEINFO_ID}/metadata?key=value成功返回 200,失败返回 500
根据虚拟 ip 查询GET/eureka/vip/{vipAddr}成功返回 200,输出 json 或 xml 格式的 body
根据基于 htpps 的虚拟 ip 查询GET/eureka/svip/{svipAddr}成功返回 200,输出 json 或 xml 格式的 body

引用:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations

在进行新实例的注册时,传入的 json、xml 的格式需要与调用获取单个实例所返回的数据格式一致。具体的数据需要自己指定,需要注意的是,如果要注册的实例的ip、端口已经存在的话,不会再次注册,需要修改 INSTANCEINFO_ID。

示例:

<instance>
    <instanceId>localhost:spring-cloud-eureka-client-simple:9000</instanceId>
    <hostName>localhost</hostName>
    <app>spring-cloud-eureka-client-simple</app>
    <ipAddr>127.0.0.1</ipAddr>
    <vipAddress>spring-cloud-eureka-client-simple</vipAddress>
    <secureVipAddress>spring-cloud-eureka-client-simple</secureVipAddress>
    <status>UP</status>
    <port enabled="true">9000</port>
    <securePort enabled="false">443</securePort>
    <homePageUrl>http://127.0.0.1:9000/</homePageUrl>
    <statusPageUrl>http://127.0.0.1:9000/info</statusPageUrl>
    <healthCheckUrl>http://127.0.0.1:9000/health</healthCheckUrl>
    <dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo">
        <name>MyOwn</name>
    </dataCenterInfo>
</instance>

使用POSTMAN发送http://localhost:8761/eureka/apps/spring-cloud-eureka-client-simple的POST请求,请求头的Content-Type设置为application/xml,则会在 Eureka 的首页页面出现该服务的注册信息:

手动注册EurekaClient服务

Eureka Server 的自我保护机制关闭(即eureka.server.enable-self-preservation=false),然后等待一段事件时间,就会触发 AbstractInstanceRegistryevict方法,即触发服务下线的操作,从而剔除服务。

其他Rest端点可以自行尝试。

3.9、高可用注册中心

在之前的讲解中,Eureka Server 都是单机版的,所以不需要注册自己。但是如果当 Eureka Server 宕机之后会发生什么?消费者可以依靠缓存继续消费远程服务提供者,若服务提供者正常服务当然没问题,但是如果需要依靠新的服务来提供服务功能的时候,就会出现服务不可用的情况,新的服务因为无法进行注册也无法告知服务消费者服务的状态,从而影响整个系统的功能,所以在分布式环境中,需要充分考虑发生故障的情况,在生产环境中必须要高可用的部署。

之前讲解概念的时候,每一个Eureka Server 同样也是一个 Eureka Client,既然是一个Client,那就可以进行注册到其他的注册中心。

在这里使用一台机器配置多个注册中心,首先需要在hosts添加映射

127.0.0.1 peer2
127.0.0.1 peer3
127.0.0.1 peer4

将原来的服务端口,以及eureka.client相关配置进行修改,以peer2节点为例:

# peer2节点
server.port=8762
spring.application.name=eureka-server

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

# 修改注册中心地址,
eureka.client.defaultZone=http://peer3:8763/eureka,http://peer4:8764/eureka
# peer3节点
server.port=8763
spring.application.name=eureka-server

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

# 修改注册中心地址,
eureka.client.defaultZone=http://peer2:8762/eureka,http://peer4:8764/eureka
# peer4节点
server.port=8764
spring.application.name=eureka-server

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

# 修改注册中心地址,
eureka.client.defaultZone=http://peer2:8762/eureka,http://peer3:8763/eureka

依次启动每一个 Eureka Server 服务,打开peer2的 Eureka 首页会发现几处不同的地方,其他节点的Eureka首页也类似:

高可用的Eureka集群注册中心

而对于服务提供者或者服务消费者,只需要配置eureka.client.defaultZone=http://peer2:8762/eureka,http://peer3:8763/eureka,http://peer4:8764/eureka即可完成注册。其实在 Eureka Client 端只配置其中一台 Eureka Server 的注册中心的地址也可以,因为在 Eureka集群中,会将任何一个peer节点的注册信息同步到其他节点上。

3.10、Eureka安全认证

默认情况下,进入Eureka首页是不需要用户名和密码的。如果需要登录的话,则只需要引入spring-security依赖:

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

同时在application.yml或者application.properties添加:

spring:
  security: #security认证
    user:
      name: eureka #用户名
      password: eureka #密码

这时登录Eureka首页的时候,会提示需要登录,如图所示:

在这里插入图片描述

输入eureka/eureka即可登录到首页。

而 **Eureka Client **客户端要想把服务注册到注册中心,需要在指定注册中心的地址之外,还需要配置注册中心的用户名和密码:

# username, password, host, port替换成真实的数据
eureka.client.service-url.defaultZone=http://${username}:${password}@${host}:${port}/eureka/

微信公众号:Java知识集训

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值