码迷,mamicode.com
首页 > 编程语言 > 详细

SpringCloud学习心得—1.3—Eureka与REST API

时间:2019-10-26 14:59:48      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:定义   hub   BYD   通过   list   推荐   git   自定义   存在   

SpringCloud学习心得—1.3—Eureka与REST API


Eureka的REST API接口

API的基本访问

Eureka REST APIEureka 作为注册中心,其本质是存储了每个客户端的注册信息,Ribbon 在转发的时候会获取注册中心的服务列表,然后根据对应的路由规则来选择一个服务给 Feign 来进行调用。

如果我们不是Spring Cloud 技术选型,也想用 Eureka,可以吗?完全可以。
如果不是 Spring Cloud 技术栈,推荐用 Zookeeper,这样会方便些,当然用 Eureka 也是可以的,这样的话就会涉及如何注册信息、如何获取注册信息等操作。其实 Eureka 也考虑到了这点,提供了很多 REST 接口API 来给我们调用。http://localhost:8761/eureka/apps/eureka中的服务名
技术图片
如果想返回 Json数据的格式,可以用一些接口测试工具来请求,比如 Postman,在请求头中添加代码Content-Type:application/json Accept:application/json即可。
如果 Eureka 开启了认证,记得添加认证信息,用户名和密码必须是 Base64 编码过的 Authorization:Basic 用户名:密码,其余的接口就不做过多讲解了,大家可以自己去尝试。Postman 直接支持了 Basic 认证,将选项从 Headers 切换到 Authorization,选择认证方式为 Basic Auth 就可以填写用户信息了。

API返回值中添加元数据metadata

元数据使用Eureka 的元数据有两种类型,分别是框架定好了的标准元数据和用户自定义元数据。标准元数据指的是主机名、IP 地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。自定义元数据可以使用 eureka.instance.metadataMap 进行配置。
在配置文件中添加

eureka:
    instance:
        metadata-map:
            port: ${server.port}
            user: yucai
            applicationName: ${spring.application.name}

可以看到技术图片

集成Eureka后获取数据

  1. 使用EurekaClient
    在我们的eureka-ervice中,简单获取一下信息,

    @GetMapping("/getApiInfo")
    public Object getApiInfo(){
        return eurekaClient.getInstancesByVipAddress("MYEUREKA-SERVICE", false);
    }

    postman中调用一下,可以获取到如下信息
    技术图片

  2. 使用DiscoveryClient
    在我们的eureka-ervice中,简单获取一下信息,

    import org.springframework.cloud.client.discovery.DiscoveryClient;
    ...
    @GetMapping("/getApiInfoByDiscoveryClient")
    public Object getApiInfoByDiscoveryClient() {
        return discoveryClient.getInstances("MYEUREKA-SERVICE");
    }

    postman中调用一下,可以获取到如下信息
    技术图片

服务异常下线的监测

健康检查默认情况下,Eureka 客户端是使用心跳和服务端通信来判断客户端是否存活,在某些场景下,比如 MongoDB 出现了异常,但你的应用进程还是存在的,这就意味着应用可以继续通过心跳上报,保持应用自己的信息在 Eureka 中不被剔除掉。

Spring Boot Actuator 提供了 /actuator/health 端点,该端点可展示应用程序的健康信息,当 MongoDB 异常时,/actuator/health 端点的状态会变成 DOWN,由于应用本身确实处于存活状态,但是 MongoDB 的异常会影响某些功能,当请求到达应用之后会发生操作失败的情况。

在这种情况下,我们希望可以将健康信息传递给 Eureka 服务端。这样 Eureka 中就能及时将应用的实例信息下线,隔离正常请求,防止出错。
代码中添加配置

eureka:
    healthcheck:
      enabled: true

模拟异常情况:定义一个扩展端点,将状态设置为 DOWN

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health.Builder;
import org.springframework.stereotype.Component;


@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {

    @Override
    protected void doHealthCheck(Builder builder) throws Exception {
        builder.down().withDetail("status", false);
    }
}

可以看到我们的服务状态就是down了
技术图片

服务上下线监控在某些特定的需求下,我们需要对服务的上下线进行监控,上线或下线都进行邮件通知,Eureka 中提供了事件监听的方式来扩展。

Euraka事件监听

目前支持的事件如下:

  1. EurekaInstanceCanceledEvent 服务下线事件。
  2. EurekaInstanceRegisteredEvent 服务注册事件。
  3. EurekaInstanceRenewedEvent 服务续约事件。
  4. EurekaRegistryAvailableEvent Eureka 注册中心启动事件。
  5. EurekaServerStartedEvent Eureka Server 启动事件。

eureka-server中添加

@Component
public class EurekaStateChangeListener {
    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        System.err.println(event.getServerId() + "\t" + event.getAppName() + " 服务下线 ");
    }
    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        System.err.println(instanceInfo.getAppName() + " 进行注册 ");
    }
    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
        System.err.println(event.getServerId() + "\t" + event.getAppName() + " 服务进行续约 ");
    }
    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        System.err.println(" 注册中心启动 ");
    }
    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        System.err.println("Eureka Server启动 ");
    }
}

注意:在 Eureka 集群环境下,每个节点都会触发事件,这个时候需要控制下发送通知的行为,不控制的话每个节点都会发送通知。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

SpringCloud学习心得—1.3—Eureka与REST API

标签:定义   hub   BYD   通过   list   推荐   git   自定义   存在   

原文地址:https://www.cnblogs.com/pipicai96/p/11743119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!