• 使用idea搭建SpringCloud项目(及所遇到的坑)


    Spring Cloud简介

    Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

    东西虽好,坑也不少

    • Spring cloud特别要注意版本和spring boot版本的兼容性 及其版本中的jar是否缺少,感觉有些版本好多坑。
      大版本对应关系
      在这里插入图片描述
      在这里插入图片描述
      不同版本搭建体验千差万别。最好不要使用最新版本。

    SNAPSHOT: 快照版本,随时可能修改

    M: MileStone,M1表示第1个里程碑版本,一般同时标注PRE,表示预览版版。

    SR: Service Release,SR1表示第1个正式版本,一般同时标注GA:(GenerallyAvailable),表示稳定版本。

    如:2.0.8.RELEASE Finchley.SR2 没有办法导入Feign包,无法使用Feign注解

    • 命名规范 最好针对模块命名 不要使用一些框架内的可能的类名 如client
    亲测通过的版本1.5.10.RELEASE Edgware.SR3

    开始搭建项目

    创建一个maven项目
    在这里插入图片描述

    创建Eureka Server

    Spring Cloud使用erureka server, 然后所有需要访问配置文件的应用都作为一个erureka client注册上去。eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳,在默认情况下erureka server也是一个eureka client ,必须要指定一个 server。
    创建一个springboot模块
    在这里插入图片描述
    选择erureka server
    在这里插入图片描述
    修改版本号
    在这里插入图片描述
    添加@EnableEurekaServer注解

    @SpringBootApplication
    @EnableEurekaServer
    public class ServerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ServerApplication.class, args);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    编写配置文件application.yml

    server:
       port: 8771
    eureka:
    # server:
    #    enable-self-preservation: true #关闭其自我保护(开发环境可以操作,方便)
      client:
         registerWithEureka: false #其本身作为注册中心,所有设置为:不显示在注册中心
         fetchRegistry: false
         serviceUrl:
             #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
             defaultZone: http://localhost:8771/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    erureka server注册中心就写完了
    运行结果:
    在这里插入图片描述
    只有注册中心,没有服务

    创建Eureka Client

    步骤同上创建springboot模块
    添加@EnableEurekaClient注解(或@EnableDiscoveryClient)

    @SpringBootApplication
    @EnableEurekaClient
    public class ClientOneApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ClientOneApplication.class, args);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    编写配置文件application.yml

    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8771/eureka/
        fetch-registry: false
    #  instance:
    #    hostname: one url别名
    server:
      port: 8773
    spring:
      application:
        name: one #serviceid
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    运行后,注册中心
    在这里插入图片描述
    注册中心与服务一般是一对多,但防止注册中心挂掉,可以在运行一个,两个互相注册

    server:
       port: 8771
    eureka:
      client:
         fetchRegistry: false
         serviceUrl:
             #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
             defaultZone: http://localhost:8772/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    服务分别向两个注册中心注册

    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/
    
    • 1
    • 2
    • 3
    • 4

    有了注册中心与多个服务实现我们的项目是不够的,服务之间需要数据传递。

    处理Eureka因为缓存机制默认配置下时效性很糟糕问题

    Eureka Server存在三个变量:(registry、readWriteCacheMap、readOnlyCacheMap)保存服务注册信息,默认情况下定时任务每30s将readWriteCacheMap同步至readOnlyCacheMap,每60s清理超过90s未续约的节点,Eureka Client每30s从readOnlyCacheMap更新服务注册信息,而UI则从registry更新服务注册信息。

    • eureka.instance.leaseRenewalIntervalInSeconds 30 Eureka Client
      续约周期,默认30s

    • eureka.client.registryFetchIntervalSeconds 30 Eureka Client
      增量更新周期,默认30s(正常情况下增量更新,超时或与Server端不一致等情况则全量更新)

    • ribbon.ServerListRefreshInterval 30000 Ribbon 更新周期,默认30s

      1.缩短readOnlyCacheMap更新周期。缩短该定时任务周期可减少滞后时间。

      eureka.server.responsecCacheUpdateIntervalMs: 10000 # Eureka Server readOnlyCacheMap更新周期

      2.关闭readOnlyCacheMap。中小型系统可以考虑该方案,Eureka Client直接从readWriteCacheMap更新服务注册信息。

      eureka.server.useReadOnlyResponseCache: false # 是否使用readOnlyCacheMap
      服务消费者缩短更新周期。Eureka Client和Ribbon二级缓存影响状态更新,缩短这两个定时任务周期可减少滞后时间,例如配置:

      eureka.client.registryFetchIntervalSeconds: 5 # Eureka Client更新周期
      ribbon.ServerListRefreshInterval: 2000 # Ribbon更新周期

  • 相关阅读:
    flink sql 使用自定义的mysql source分片读取
    OceanBase TableAPI实践案例(Rust)
    浅谈赚钱的四个级别,你在哪一层呢
    No6-4.从零搭建spring-cloud-alibaba微服务框架,解决微服务间的不鉴权调用等(四,no6-4)
    【计算机毕业设计】211校园约拍微信小程序
    axios 封装
    [R] Levels of the datasets
    EL表达式内置对象initParam
    局域网电脑共享设备或文件时显示无法访问并提示无权限之解决方法
    如何消除文法二义性、如何判断二义文法—编译原理
  • 原文地址:https://blog.csdn.net/m0_67402588/article/details/126553739