SpringCloud-Eureka注册与发现

EUREKA工作原理:

        由于业务的需要,最近在进行项目重构,为了以后系统的高可用性、稳定性等,以及最终选型基于微服务架构体系进行开发重构,本次采用 “服务注册与发现——Eureka” 。

        Eureka简介:Eureka是基于REST(Representational State Transfer)服务,主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移。我们称此服务为Eureka服务。

       Eureka核心组件:Eureka Server     Eureka Client

       Eureka Server:Eureka Server提供服务注册功能,各个服务节点启动后,会向Eureka Server进行服务注册,Eureka Server保存各个服务节点的信息以及使用“心跳”机制进行服务监控,保持Eureka Client中的服务及时更新。需要注意是:单节点的Eureka Server是不需要将自己注册到Eureka注册中心,因为它本身就是一个服务。它自己就已经是个注册中心,把当前服务注册到当前服务充当注册中心,这个逻辑有点说不通。(Enreka Server集群除外)

       Eureka Client:Eureka Client是一个与Eureka Server进行交互的应用,所有注册进来的服务在Eureka Client里都能够直观的看到,当Eureka Client中的服务节点启动过后,它会一直与Eureka Server进行服务节点生命状态的“汇报”工作,每30秒的频率向Eureka发送“心跳”指令告诉它:“我正处于健康状态”,如果Ereka Server在90秒内没有收到Eureka Client 发送的“心跳”指令,会将该服务节点当成“死亡状态”进行剔除。Enreka Client中的服务包含两个角色:分别是:Application Server(服务提供者)以及Application Client(服务消费者),服务没有固定的角色,它可能是服务消费者,也可能是服务提供者。同时,Eureka Client本身具备“负载均衡器”,消费者只需要告诉Eureka Client我需要什么样的服务就可以了,不用考虑某个服务节点压力过大的问题。

      Eureka Client中Application Client调用Application Server时的机制:

               一旦服务注册到了 Eureka Server 注册中心Eureka Client都会从注册中心拉取一份最新的“服务列表”保存在本地缓存中所以Application Client每次调用服务时,都会先查询自己“本地缓存”中是否存在服务列表,如果没有,则会向Eureka Server中拉取服务列表,这种机制的好处就是每次服务调用都不一定会访问Eureka Server,大大减少了控制中的压力。但单节点Eureka注册中心会存在一个弊端,就是当Eureka Server因为某种因素宕机后,Application Client还是能够正常访问服务,但问题来了,如果向Eureka Server注册了一个新的服务又会怎么样?答案当时是:注册失败!所以Eureka集群的搭建就很有必要。(下期讲解双节点Eureka集群搭建及工作原理)

   Eureka原理架构图:

  

    当服务向Eureka Server进行注册时,Eureka Client中的服务会相互复制服务信息以及地址,达到一致性的效果,所以当Eureka Server宕机后,服务之间的调用也不会出现任何问题。

单节点Eureka Server搭建:

     Eureka Server搭建:

File——new——Project

 

 

接下来需要注意的是,因为我们要搭建Eureka Server(注册中心),所以以下选择一点要选上。

接下来直接Finish,然后就能直观地看到:

找到启动类,在启动类加上 @EnableEurekaServer (表明该模块为Eureka注册中心)

Eureka Server application.properties配置:

现在我们就可以启动项目进行验证该配置是否正确,在浏览器输入:服务器地址+端口号。

以上可以看到Eureka Server搭建成功!

Eureka Client搭建:

接下来我们进行Eureka Client搭建,将它作为服务注册进去,和Eureka Server搭建基本一致。由于Eureka是我们这次重构用到的技术,所以以下的Eureka Client就用我现在已有的模块,你们可以自己搭建模块进行测试。下面我将把"smarthospital-basicdata"与"smarthospital-treatment"分别作为Application Server和Application Client 注册到我们的控制中心。

找到Eureka Client启动类(smarthospital-basicdata):

在启动类上加上@EnableDiscoveryClient,表明它是一个Eureka Client。也可以加@EnableEurekaClient,他们的作用都是一样的,唯一的区别就是:pringCloud中的“Discovery Service”有多种实现(@EnableDiscoveryClient),比如:eureka, consul, zookeeper。而@EnableEurekaClient只能为eureka作用;如果你的注册中心确定是Eureka的话,建议使用@EnableEurekaClient, 比较单一

Eureka Client application.properties配置:

下面我们启动该Eureka Client试试:

在注册中心可以清晰的看到,basicdata这条实例以及注册到我们的注册中心里了。

我们再将"smarthospital-treatment"注册进来(和上面步骤一样,只需要改下端口号和服务名,其他不变)。

可以看到第二个服务已经注册进来了,接下来我们进行服务之间的调用:

我们现在要用TREATMENT调用BASICDATA,找到服务提供者提供的Controller。

比如我们要调用该接口,现在我们在smarthospital-treatment中的接口(interface)里将地址配置好。

在上图中我们可以看到@FeignClient注解,这个注解是服务调用时所需要的注解,要调用哪个服务的接口就写哪个服务名。

 

现在我们可以在实现类里将FeignOperativeService注入进来,然后进行测试。(具体实现细节不写了)

然后进行smarthospital-treatment实现类对应的Controller调用,试试有没有服务调用成功,如果数据存在,则成功。

  可以看到数据已经成功获取,Eureka Client 服务之间调用成功!

  以上就是Eureka Server 与 Eureka Client 之间的关系,如有问题,请指出。谢谢大家阅读!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值