SpringCloud学习--- Eureka

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud学习--- Eureka相关的知识,希望对你有一定的参考价值。

一、Eureka简介

在这里插入图片描述
Eureka Server可以监控各个微服务是否正常运行,也就是以前Zookeeper通过zkServer.cmd点击手动启动服务,这个Eureka可以自动通过扫描到注解启动。服务提供者可以将自身服务注册到Eureka中,从而消费者可以从注册中心找到消费服务

二、IDEA中实现Eureka

2.1 Eureka Server

Eureka Server搭建比较简单,传送链接 通过此链接即可搭建

手把手搭建视频

注意:务必保证版本对应,如此处我用Hoxton.SR8,SpringBoot对应版本是2.3.0.RELEASE,默认创建SpringBoot项目时可能一开始给你自动设置SpringBoot最新版
在这里插入图片描述
在这里插入图片描述
配置好,效果如下
在这里插入图片描述

2.2 Eureka Client

手把手配置 Eureka Client
配置和之前Server差不多,也简单,配置完成启动后,刷新原先localhost:8761这个地址,就会出现你配置的Customer,往同一个地址注册,就看得到
在这里插入图片描述

2.3 测试Eureka

再建一个Eureka_Test,也是Client,TestApplication为启动类,完成后启动,有三个正在启动,server中就能看到CUSTOMER和TEST这两个Client
在这里插入图片描述

https://www.bilibili.com/video/BV15e411W75G?p=147
在这里插入图片描述
我们现在要做的事情就是Customer要去Test中拿到数据,通过Eureka Server注册中心,也就是通过访问customer的地址,实际获取到test中的内容

@RestController
public class CustomerController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private EurekaClient eurekaClient;

    @GetMapping("/customer")
    public String customer(){
        //1、通过eurekaClient获取到TEST服务信息
        InstanceInfo info = eurekaClient.getNextServerFromEureka("TEST", false);
        //2、获取到访问地址
        String url = info.getHomePageUrl();
        System.out.println(url);
        //3、通过restTemplate访问,拿到结果
        String res = restTemplate.getForObject(url + "/test", String.class);
        //4、返回到浏览器
        return res;
    }
}

@RestController
public class TestController {

    @GetMapping("/test")
    public String search(){
        return "test";
    }
}

可以看到我这里访问的是customer,但是可以获取到test
在这里插入图片描述
在这里插入图片描述

2.4 Eureka安全性

通过 http://localhost:8761/ 可以直接访问到Eureka注册中心,谁都可以访问,这样是不安全的,所以我们要把它变为安全,需要进行Eureka认证
此处可以参考官方文档
在这里插入图片描述
在这里插入图片描述
重新配置后就需要登录认证,这样就有安全性了
在这里插入图片描述
然后其他服务要注册到Eureka Server也要写账号密码,只要在配置文件defaultZone,地址前写账号密码即可,然后重启一下。
在这里插入图片描述
安全性视频手把手配置

2.5 Eureka高可用

如果之前已经访问过一次,比如customer访问过test,那么customer内部会有缓存,就算中途Eureka宕机停止了,customer还是可以访问。
如果一次都没访问,也就是customer,test只运行过,没有访问过另外一个,这时Eureka宕机,那么customer就不能访问到test了。

那能不能保证不管什么时候customer都能访问test呢,可以!!!只要多个Eureka即可,也就是Eureka集群,一个宕机其他也可运行,主要是配置application.yml,变为true,互相连接对方即可,然后一个宕机就也不影响访问,具体看视频教学
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、Eureka执行流程

1、EurekaClient启动时,会将自己的信息注册到EurekaServer上,EurekaServer会存储EurekaClient的注册信息
2、当EurekaClient调用服务时,本地没有注册信息的缓存时,去EurekaServer中获取注册信息
3、EurekaClient会通过心跳的方式去和EurekaServer进行连接。(默认30sEurekaClient会发送一次心跳请求,如果超过90s还没有发送心跳信息,EurekaServer就默认该EurekaClient宕机了,会将当前EurekaClient从注册表中移除,这个默认时间可以修改)
4、EurekaClient会每隔30s去EurekaServer更新本地注册表

5、有时候Eureka中会出现红字,这是Eureka的自我保护机制,统计15分钟内,如果一个服务心跳比例小于85%,EurekaServer就会开启自我保护机制,就不会从EurekaServer中移除长时间没有收到心跳的服务。

在这里插入图片描述

6、CAP定理
C:一致性
A:可用性
P:分区容错性

这三个在分布式环境下只能保证两个,而且分区容错性在分布式环境下,是必须满足的,分区容错性就是比如Eureka Server1在上海,Eureka Server2在北京,他们两个地方互联网传输通信肯定有网络不稳定等等不可避免的众多因素,所以需要一定容错性。那么CA之间,如果选择C,保证一致性,会造成系统在一定时间内是不可用的,这肯定是不行的,会造成较大损失。Eureka就是AP的一个效果,保证高可用,集群中宕几个也没关系,不过可能会在一小段时间数据不同步。

以上是关于SpringCloud学习--- Eureka的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud学习心得—1.2—Eureka注册中心的密码认证高可用的设置

SpringCloud 学习笔记总结

SpringCloud学习--- Eureka

SpringCloud学习总结——服务注册中心Consul

SpringCloud-02 Eureka学习笔记

springcloud学习笔记day02——Eureka