SpringCloud之Eureka注册服务与发现

上一篇:SpringCloud微服务案例(基础篇)
前言
        eureka作用是统一管理微服务的一个服务,相当于学校(eureka)管理教师(微服务)教学生(客户)学习(客户调用微服务)某某科(微服务调用微服务)
学习目录:
        一、Eureka基础知识
        二、单机Eureka初步构建步骤
        三、集群Eureka构建步骤
        四、Actuator微服务信息完善
        五、服务发现Discovery
        六、Eureka自我保护

一、 Eureka基础知识
  • 什么是服务治理?
            Cloud封装了Netflix公司开发的Eureka模块来实现服务治理
            在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实行按服务调用、负载均衡、容错等,实现服务发现与注册。
            eureka两个组件:
            Eureka Server提供服务注册
            各个微服务节点通过配置启动后,会在EurekaServer中心注册,这样EurekaServer中的服务注册表中将会储存所有可用服务节点的信息,服务节点的信息可以再界面中直观看到。
            Eureka Client通过注册中心访问
            是一个Java客户端,用于简化Eureka Server的交互,客户端同时也是具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。再应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)即给Server一个响应,证明某个微服务还活着。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server会从服务注册表中把这个服务节点移出(默认90秒)。
    在这里插入图片描述
二、单机Eureka初步构建步骤

        ①、Idea生成Eurka Server服务注册中心——类似于物业公司
        新建module,还是跟以前一样,改pom、yml、启动类,其中module就不多说了,这次我们的pom需要添加一个新的依赖,那就是相关于eureka service的一个依赖。
在这里插入图片描述
        YML文件
在这里插入图片描述
        启动类
在这里插入图片描述
        此时启动如果说出现了jar包冲突的问题[NonLoginAuthenticator[StandardEngine[Tomcat].StandardHost[localhost].Tomcat 那么请继续如下操作:
在这里插入图片描述
        在下面找到servlet.api.jar包删除即可
在这里插入图片描述
        然后我们可以启动一下看看,到底启动了一个什么东西
在这里插入图片描述
        可以看到红线部分没有服务被注册进来
        ②、那么接下来,要将8001加入注册中
        EurekaClient段cloud-provide-payment8001将注册进EurekaServer成为服务提供者provider,类似培训机构基地对外提供授课服务。
        步骤:
        1、 修改pom文件——添加eureka client依赖
在这里插入图片描述
        2、 修改yml文件——添加eureka client配置
在这里插入图片描述
        3、 修改启动类——添加@EnableEurekaClient注解
在这里插入图片描述
        依次启动7001、8001项目。再次刷新注册中心我们可以看到
在这里插入图片描述

三、集群eureka搭建

在这里插入图片描述
        微服务RPC远程服务调用最核心的是什么
        试想如果注册中心只有一个,假使出故障了,会导致真个服务环境不可用,所以解决办法:搭建Eureka注册中心集群,实现负载均衡+故障容错。
        现在我们开始来搭建注册中心集群,首先我们还需要再创建一个eureka服务,创建步骤还是跟原来一样
        ① 新建module——cloud-eureka-server7002
        ② 修改pom文件,添加依赖
        ③ 创建yml文件,配置端口号和eureka服务
        ④ 创建启动类
        其中主要再说一下pom依赖需要哪些
        1、spring-cloud-starter-netflix-eureka-server
         2、spring-boot-starter-web
         3、spring-boot-starter-actuator
         4、spring-boot-devtools
         5、lombok
         6、spring-boot-starter-test
        其中1-4是必要的。
        再说一说yml的配置
在这里插入图片描述
        在eureka7001中,我们的eureka的hostname直接是localhost,在集群中,我们为了模仿多台服务器,所以我们修改了DNS映射,打开电脑的hosts文件,文件大概位置在C:\Windows\System32\drivers\etc\hosts,修改成如下模样。
在这里插入图片描述
        最后需要让其配置生效,方法是:打开cmd命令框,输入如下命令ipconfig /flushdns
在这里插入图片描述
        如hosts所见,有eureka7001.com和eureka7002.com,由此可见,在7001中也是需要修改成7002模样的,但是需要注意的地方,我们的eureka注册集群是7001注册进7002,7002注册进7001,这样才能做到相互守望,一台服务器要是倒下,另一台也能用。因此7002的注册地址要访问7001,即
在这里插入图片描述
        7001yml最后是下图这个样子的

在这里插入图片描述
        然后我们可以依次通过访问
        localhost:7001
        localhost:7002
        eureka7001:7001
        eureka7002:7002测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        我们的eureka注册集群就搭建好了!
        但是可别忘了,eureka注册服务是集群,服务提供者也是集群Service Provider,所以我们现在要做的就是让payment服务也成集群模样,因此我们还需要再重新创建一个8002的payment。此时8001和8002的yml都需要分别注册进两个eureka里面去。如下:
在这里插入图片描述

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

负载均衡

        这时候我们为了方便测试http://localhost:8001/payment/get/31 ,让端口号直接显示在信息上,在controller层修改如下:
在这里插入图片描述
        可访问http://localhost:8001/payment/get/31 时,并不会改变端口号,这是没有设置负载均衡,在80微服务中,配置restTemplate中在方法上添加@LoadBalanced注解即可,每次刷新请求时会发送到不同的端口号(8001或者8002)
在这里插入图片描述

四、Actuator微服务信息完善

        为了方便在eureka注册页面上查看服务信息,我们会修改两个部分,一个是不要暴露主机名,只要服务名,一个是访问信息有IP提示。
在这里插入图片描述
第一步就是要有actuator的依赖,我们添加依赖的时候总是会添加这么一个依赖
在这里插入图片描述
第二步是要修改注册到eureka的两个微服务的yml,都要添加eureka的instance-id的实例即可,如8002微服务
在这里插入图片描述
再次访问eureka注册中心,我们会发现服务名已经发生变化
在这里插入图片描述
然后进行IP提示部分
同样在两个微服务的yml的eureka配置里
在这里插入图片描述

五、服务发现Discovery

        对于注册进eureka里面的服务,可以通过服务发现来获得该服务的信息。这个服务发现是与eureka分离出来的一个东西,意思就是可以不依靠于eureka注册服务。

        首先先要注入一个DiscoveryClient
在这里插入图片描述
在这里插入图片描述
        例如我们可以对外提供一个接口,这个接口就可以得到所有注册的微服务,还可以实例化某个微服务,查看其服务信息,如主机名,id,端口号以及url
在这里插入图片描述
        查看输出内容
在这里插入图片描述

六、Eureka自我保护机制

        eureka的自我保护机制:一句话,某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存,即eureka接收不到该微服务的心跳反应,也不会对其清理。
        自我保护模式:默认情况下,如果Eureka在一定时间内没有接收到某个微服务实例的心跳,Eureka精会注销该实例(默认90秒)。但是当网络分区故障发生时(延时、卡顿、拥挤),微服务与EurekaServer之间无法正常通讯,以上行为可能变得非常危险了,因为微服务本身其实是健康的,此时本不应该注销这个微服务。eureka通过“自我保护模式”来解决这个问题——当EurekaServer节点在短时间内丢失过多客户信息时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。
        其实简单来讲就是,微服务可能会因为网络延迟而导致没有给eurekaServer发送心跳包,但其本身是正常的,就是因为网络问题,出现微服务假死状态,此时eureka就不能剔除掉该微服务,设计eureka时可能就在想,万一一会网络好了,又能收到该微服务的心跳包呢。总之一句话,宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例,好死不如赖活着。
        如果想要关闭这种自我保护机制,可以在yml中修改配置,打开我们的eureka注册服务中心的yml做如下修改即可:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值