SpringCloud 微服务注册中心 Eureka - Client

前言

前段时间业务工作太忙,很久没有学习技术了~ 碰巧前几天工作中遇到一个问题需要研究注册中心和 OpenFeign 源码才能解决,由于 OpenFeign 源码我已经比较熟悉了,所以今天来分享一下 Eureka ClientServer 注册实例的原理。只有懂原理才能进行扩展,对项目进行不断优化。

也许很多人会说 Eureka 已经过时了,我又何尝不知道相对来说 Nacos 更好用,而且 Eureka 已经不更新了,但是没有办法呀,公司用的就是 Eureka 。不过大体思想都是相同的,只是 NacosEureka 的基础上做了一些优化让服务注册中心更加完善。读完 Eureka 源码还会怕 Nacos 么?

注册中心简介

回想微服务架构流行之前,在没有注册中心的时候两个系统的交互通常是通过 http 请求远程调用。这样会存在一些问题,需要写死服务提供方的 ip端口或者域名。随着业务规模发展,系统应用越来越多,复杂的业务交互让我们每个应用都不得不维护其他应用的ip端口信息。

SpringCloud 微服务注册中心 Eureka - Client_第1张图片

假设有上图的九个应用,由于他们之间都可能存在交互,那么每个应用都要在自己本地写一份其他八个应用的地址端口信息,这无疑给维护带来巨大的工作量。如果每个系统都有域名的话还好,互相写死域名地址就行,新增实例的时候只需要在 Nginx 配置文件添加负载均衡节点就行。

如果系统没有域名那就苦逼了,每个服务都得存其他应用的 IP端口信息

private Map> map; //key 是应用名,value 是实例集群

新增、减少实例的时候也得去改动这个 map,那么最简单的方式就是把这个 map 从配置文件 application.yml 读取,方便动态修改。但是每个应用都得这样操作无疑也是很大的工作量,于是我们想是否可以将所有应用的实例信息放在一个公共的地方来维护,于是服务注册中心诞生了。

服务注册中心就是解决这个问题的,独立出一个单独的微服务来存储所有微服务应用的实例信息,并且它是存储在内存中,当微服务上线、下线的时候实时修改这份共享的数据,确保客户端来这里查询其他服务实例信息的时候能够获取到最准确的信息。

SpringCloud 微服务注册中心 Eureka - Client_第2张图片

搭建 Eureka Server

引入依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server

复制代码

配置文件

eureka:
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 5000
  instance:
    hostname: localhost
    prefer-ip-address: true
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动类添加 @EnableEurekaServer

搭建 Eureka Client

引入 Eureka Client 依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

配置文件

eureka:
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
    lease-expiration-duration-in-seconds: 15  #eureka服务收到最后一次心跳后等待时间上限,默认值 90
    lease-renewal-interval-in-seconds: 10  #向eureka服务发送心跳的时间间隔,默认值 30
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/ # eureka server 地址
    registry-fetch-interval-seconds: 3 #3秒钟去eureka拿一次微服务注册实例,默认值 30

老版本还需要在启动类使用 @EnableEurekaClient 注解,新版本中可以省略。这样一个 Eureka Client 就完成了。

可以发现 Eureka

你可能感兴趣的:(eureka,spring,cloud,微服务,java,spring)