• SpringCloud 微服务注册中心 Eureka - Client


    前言

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

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

    注册中心简介

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

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

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

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

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

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

    搭建 Eureka Server

    引入依赖

    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    
    复制代码
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置文件

    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/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    启动类添加 @EnableEurekaServer

    搭建 Eureka Client

    引入 Eureka Client 依赖

    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    
    
    • 1
    • 2
    • 3
    • 4

    配置文件

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    可以发现 Eureka

  • 相关阅读:
    AOP进阶-连接点
    redis部署与管理
    【Javascript】设计模式之单例模式
    新品发布 | Cloudpods 3.9.1 版本上线
    leetcode - 1293. Shortest Path in a Grid with Obstacles Elimination
    Lesson5-1:OpenCV视频操作---视频读写
    时序数据库
    大数据学习——Zookeeper集群搭建
    java基于ssm的房屋租赁出租管理系统
    RHCE(逻辑卷LVM,NFS服务)
  • 原文地址:https://blog.csdn.net/Huangjiazhen711/article/details/127684474