SpringClouid学习笔记(正在更新中...)

news2024/12/23 15:57:30

目录

  • SpringCloud
    • 1、微服务
      • 1.1、定义
      • 1.2、特性
        • 单体应用
        • 微服务应用
      • 1.3、微服务架构演变(RPC)
      • 1.4、微服务解决方案
    • 2、SpringCloud
      • 2.1、什么是SpringCloud
        • 官方定义
        • Demo
        • SpringCloud版本和SpringBoot版本选择
    • 3、环境搭建
        • 环境说明
        • 构建方式
        • 开始构建
    • 4、服务注册中心组件(开始进入正题:引依赖、写配置、加注解)
      • 4.1、定义
      • 4.2、作用
      • 4.3、常用的注册中心
      • 4.4、**Eureka** Server
      • 4.5、Eureka Client
      • 4.6、Eureka的自我保护机制
        • 定义
        • 集群
      • 4.7、Consul注册中心组件
        • 安装
      • 4.8、Consul Client
    • 5、微服务间的通信
      • 5.1、Ribbon组件(负载均衡)
        • 介绍(实现负载均衡的客户端组件,它本身不能发送请求,发送请求依然借助restTemplate)
        • 使用RestTemplate和Ribbon实现负载均衡
        • Ribbon实现负载均衡的原理
      • 5.2、OpenFeign组件
        • 定义
        • 使用OpenFeign组件
        • 参数传递
        • OpenFeign细节
    • 6、微服务重要概念
      • 6.1、服务雪崩
      • 6.2、服务熔断
      • 6.3、服务降级
      • 6.4、服务熔断和服务降级比较
      • Hystrix
        • 定义
        • 使用Hystrix组件
        • HystrixDashBord(Hystrix可视化界面)
    • 7、网关
      • 7.1、什么是网关
      • 7.2、网关在微服务中的架构
      • 7.3、网关组件
        • GateWay(SpringCloud)
    • 8、Config组件(统一配置中心)
      • 8.1、定义
      • 8.2、Config Server(服务端)
    • 9、Bus组件(消息总线)
      • 9.1、定义
      • 9.2、利用Bus组件实现远端配置自动刷新
      • 9.3、利用webhooks实现配置自动刷新
  • SpringCloudAlibaba
    • 1、定义
    • 2、Nacos组件
      • 2.1、安装
      • 2.2、搭建NacosClient(微服务)
  • 配置服务注册中心地址

SpringCloud

1、微服务

1.1、定义

14年 新的架构

官方定义 : 微服务就是由一系列围绕自己业务开发的微小服务构成,他们独立部署运行在自己的进程里,基于分布式的管理

集群:同一种软件的多个服务节点共同为系统提供服务

分布式:不同软件集群共同为系统提供服务

通俗定义 : 微服务是一种架构,这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中。

1.2、特性

单体应用

优点

  • 单—架构模式在项目初期很小的时候开发方便,测试方便,部署方便,运行良好

缺点

  • 应用随着时间的推进,加入的功能越来越多,最终会变得巨大,一个项目中很有可能数百万行的代码,互相之间繁琐的jar包。久而久之,开发效率低,代码维护困难
  • 还有一个如果想整体应用采用新的技术,新的框架或者语言,那是不可能的。任意模块的漏洞或者错误都会影响这个应用,降低系统的可靠性

微服务应用

优点

  • 将服务拆分成多个单一职责的小的服务,进行单独部署,服务之间通过网络进行通信,每个服务应该有自己单独的管理团队,高度自治
  • 服务各自有自己单独的职责,服务之间松耦合,避免因一个模块的问题导致服务崩溃

缺点

  • 开发人员要处理分布式系统的复杂性
  • 多服务运维难度,随着服务的增加,运维的压力也在增大,服务治理和服务监控关键

1.3、微服务架构演变(RPC)

在这里插入图片描述

1.4、微服务解决方案

在这里插入图片描述

2、SpringCloud

2.1、什么是SpringCloud

官方定义

  • springc loud为开发人员提供了在分布式系统中快速构建一些通用模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线)。分布式系统的协调导致了锅炉板模式,使用springcloud开发人员可以快速地建立实现这些模式的服务和应用程序。
  • springcloud是一个含概多个子项目的开发工具集,集合了众多的开源框架,他利用了Spring Boot开发的便利性实现了很多功能,如服务注册,服务注册发现,负载均衡等. springCloud在整合过程中主要是针对Netflix(耐非)开源组件的封装.springCloud的出现真正的简化了分布式架构的开发。
  • NetFlix是美国的一个在线视频网站,微服务业的翘楚,他是公认的大规模生产级微服务的杰出实践者, NetF1ix的开源组件已经在他大规模分布式微服务环境中经过多年的生产实战验证,因此Spring cloud中很多组件都是基于NetFlix

Demo

在这里插入图片描述

SpringCloud版本和SpringBoot版本选择

在这里插入图片描述

3、环境搭建

环境说明

  • jdk1.8
  • maven3.8.4
  • springcloud Hoxton.sR(6)
  • springboot2.2.6

构建方式

  • maven聚合的方式:子项目复用父项目的版本号

开始构建

  • 创建一个空的项目(空文件夹)

  • 创建一个父项目(maven)进行版本控制,删除src目录,pom文件使用parent 标签,引入SpringBoot父项目

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>SpringCloudAgain</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
        <modules>
            <module>01_eureka_server</module>
        </modules>
    
        <!--继承springboot的父项目-->
        <parent>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.2.6.RELEASE</version>
        </parent>
    
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
            <spring.cloud-version>Hoxton.SR6</spring.cloud-version>
        </properties>
    
        <!--维护版本-->
        <dependencyManagement>
            <dependencies>
                <!--维护Spring Cloud的版本-->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <!--引入的是properties标签定义的版本-->
                    <version>${spring.cloud-version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    </project>
    

4、服务注册中心组件(开始进入正题:引依赖、写配置、加注解)

4.1、定义

所谓服务注册中心就是在整个的微服务架构中单独提出一个服务,这个服务不完成系统的任何的业务功能,仅仅用来完成对整个微服务系统的服务注册和服务发现,以及对服务健康状态的监控和管理功能。

4.2、作用

  • 可以对所有的微服务的信息进行存储,如微服务的名称、IP、端口等
  • 可以在进行服务调用时通过服务发现查询可用的微服务列表及网络地址进行服务调用
  • 可以对所有的微服务进行心跳检测,如发现某实例长时间无法访间,就会从服务注册表移除该实例。

4.3、常用的注册中心

springcloud支持的多种注册中心Eureka (netfilx)、Consul (go)、Zookeeper (java)、以及阿里巴巴推出Nacos (java)。这些注册中心在本质上都是用来管理服务的注册和发现以及服务状态的检查的。

4.4、Eureka Server

在这里插入图片描述

开发Eureka 注册中心

  • 创建Springboot子项目

  • 引入依赖(pom文件)

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>SpringCloudAgain</artifactId>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>01_eureka_server</artifactId>
    
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <!--引入web依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--引入eureka 依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    
  • 配置端口

    # eureka server 默认端口号8761
    server:
      port: 8761
    # 服务名 建议大写 且不运行名称中带有下划线_(注意服务名称唯一,不区分大小写,推荐大写)
    spring:
      application:
        name: EUREKASERVER
    # 注册中心 管理页面地址 http://localhost:8761 不带/eureka
    eureka:
      client:
        # 关闭eureka的立即注册功能 默认true,启动就注册,关闭后,启动不会报错
        fetch-registry: false
        # 让当前应用仅为注册中心,启动后不再把自己注册进去(关闭自己注册自己,自己不在作为客户端,仅仅作为服务端)
        register-with-eureka: false
        service-url:
          defaultZone: http://localhost:8761/eureka
    
  • 编写启动类,添加注解、测试是否能够启动成功

    package com.ma;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class MyEurekaServerSpringBootApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyEurekaServerSpringBootApplication.class,args);
        }
    }
    

4.5、Eureka Client

Eureka Client就是一个个微服务,例如订单服务、支付服务等等

  • 创建一个SpringBoot子项目

  • 引入依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
        </dependencies>
    
  • 编写配置文件

    #配置端口
    server:
      port: 8989
    
    #客户端名称,也就是服务名称
    spring:
      application:
        name: EUREKACLIENT
    #配置服务注册中心的地址
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka
    
    
  • 编写启动类,添加注解

    package com.ma;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class MyEurekaClientSpringBootApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyEurekaClientSpringBootApplication.class,args);
        }
    }
    

4.6、Eureka的自我保护机制

在这里插入图片描述

如果注册到服务中心上的服务因为某种缘故造成服务宕机了,eureka开启自我保护模式,eureka服务注册中心不会移除任何已注册的服务

定义

默认情况下,如果Eureka Server在一定时间内(默认90秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。

EurekaServer在运行期间会去统计心跳失败比例在15分钟之内是否低于85%,如果低于85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期。这种设计的哲学原理就是"宁可信其有不可信其无!"。自我保护模式正是一种针对网络异常被动的安全保护措施,使用自我保护模式能使Eureka集群更加的健社、稳定的运行。

关键字:网络分区

自我保护模式什么时候失效?

  • 关闭自我保护模式
  • 心跳的比例高于阈值

自定义自我保护机制

  • 服务端(eureka注册中心)关闭自我保护机制
  • 客户端设置

集群

  • 多个节点(eureka服务注册中心)相互发现
  • 彼此之间相互注册

4.7、Consul注册中心组件

consui是一个可以提供服务发现,健康检查,多数据中心,Key/Value存储等功能的分布式服务框架,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,使用起来也较为简单。consu1用Golang实现,因此具有天然可移楂性(支持Linux、 windows和Mac 0S x);安装包仅包含一个可执行文件,方便部署。

安装

在这里插入图片描述

在这里插入图片描述

4.8、Consul Client

  • 创建SpringBoot子项目
  • 添加依赖
  • 编写配置,启动类添加相应注解
  • 注意:需要给client客户端加入健康检查 的依赖

存在问题:consul服务不能注册

5、微服务间的通信

在这里插入图片描述

存在的问题:

  • 基于RestTemplate实现的服务之间的通信没有充分利用到注册中心

在这里插入图片描述

5.1、Ribbon组件(负载均衡)

介绍(实现负载均衡的客户端组件,它本身不能发送请求,发送请求依然借助restTemplate)

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于wetflix Ribbon实现。通过Spring cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

使用RestTemplate和Ribbon实现负载均衡

DiscoveryClient

  • 并没有实现负载均衡

LoadBalanceClient

  • 实现了负载均衡(轮询)

@LoadBanlanced

存在问题:

  • 路径存在代码中不利于维护

Ribbon实现负载均衡的原理

5.2、OpenFeign组件

定义

Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性(可以使用springmvc的注解),可使用Feign注解和AX-RS注解。Feign支持可插拔的编码器和解码器。Feignr默认集成了Ribbon,默认实现了负载均衡的效果并且springcloud为feign添加了springmvc注解的支持。

使用OpenFeign组件

  • 创建Demo(category、product两个服务),分类服务要调用商品服务

  • 引入OpenFeign依赖(在服务调用方,也就是category服务)

    <!--openfeign-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  • 服务调用方主启动类添加注解@EnableFeignClients 开启Feign服务支持(加注解、写接口)

  • 开发客户端接口

参数传递

零散参数:零散传参主要分为两种,一种是路径传参,一种是queryString传参

注意:服务调用方,在接口对应的方法上要使用@RequestParam@Pathvarible 进行声明,目的是为了让这个Openfeign组件(伪http客户端)知道使用哪种方式进行传参。

对象:json对象格式和form表单格式

使用@RequestBody 注解和@RequestPart 注解

数组

使用@RequestParam 注解

集合

注意:SpringMVC不能直接接收集合,需要借助对象进行接收,在对象中声明一个集合;

OO:面向对象

VO:value object 值对象,用户接收

DTO:data transfer object数据传输对象,用来传输

OpenFeign细节

  • openfegin超时处理(及修改)
  • openfegin日志(详细配置查看资料)

6、微服务重要概念

6.1、服务雪崩

在微服务之间进行服务调用是由于某一个服务故障,导致级联服务故障的现象,称为雪崩效应。雪崩效应描述的是提供方不可用,导致消费方不可用并将不可用逐渐放大的过程。

在这里插入图片描述

而此时,service A的流量波动很大,流量经常会突然性增加!那么在这种情况下,就算service A能扛得住请求,service B和lService c未必能扛得住这突发的请求。此时,如果service c因为抗不住请求,变得不可用。那么Service s的请求也会阻塞,慢慢耗尽service B的线程资源,serviceB就会变得不可用。紧接着,Service A也会不可用。

6.2、服务熔断

定义

““熔断器”"本身是一种开关装置,当某个服务单元发生故障之后,通过断路器(hystrix)的故障监控,某个异常条件被触发,直接熔断整个服务。向调用方法返回一个符合预期的、可处理的备选响应(Fa11Back),而不是长时间的等待或者抛出调用方法无法处理的异常,就保证了服务调用方的线程不会被长时间占用,避免故障在分布式系统中蔓延,乃至雪崩。如果目标服务情况好转则恢复调用。服务熔断是解决服务雪崩的重要手段。

开关条件

1、当满足一定的阀值的时候(默认10秒内超过20个请求次数)

2、当失败率达到一定的时候(默认10秒内超过50%的请求失败)-

3、到达以上阀值,断路器将会开启

4、当开启的时候,所有请求都不会进行转发

5、一段时间之后(默认是5秒),这个时候断路器是半开状态,会让其中一个请求进行转发。如果成功,断路器会关闭,若失败,继续开启。重复4和5

在这里插入图片描述

6.3、服务降级

服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此缓解服务器的压力,以保证核心任务的进行。同时保证部分甚至大部分任务客户能得到正确的响应。也就是当前的请求处理不了了或者出错了,给一个默认的返回。

服务降级:关闭微服务系统中某些边缘服务保证系统核心服务正常运行,例如:确认收货---->服务繁忙!

6.4、服务熔断和服务降级比较

共同点

目的很一致,都是从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段;-最终表现类似,对于两者来说,最终让用户体验到的是某些功能暂时不可达或不可用;

粒度一般都是服务级别,当然,业界也有不少更细粒度的做法,比如做到数据持久层(允许查询,不允许增删改);

自治性要求很高,熔断模式一般都是服务基于策略的自动触发,降级虽说可人工干预,但在微服务架构下,完全靠人显然不可能,开关预置、配置中心都是必要手段:sentinel

异同点

触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;

管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务边缘服务开始)

总结

熔断必会触发降级,所以熔断也是降级一种,区别在于熔断是对调用链路的保护,而降级是对系统过载的一种保护处理

Hystrix

定义

译:在分布式环境中,许多服务依赖项不可避免地会失败。Hystrix是一个库,它通过添加延迟容忍和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止它们之间的级联故障以及提供后备选项来实现这一点,所有这些都可以提高系统的整体弹性。

通俗定义:Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免的会调用失败,超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障(服务雪崩现象),提高分布式系统的弹性。

使用Hystrix组件

在所有微服务中添加Hystrix添加对应依赖

<!--hystrix-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

主启动类添加注解

//开启服务熔断
@EnableCircuitBreaker

HystrixDashBord(Hystrix可视化界面)

Hystrix Dashboard的一个主要优点是它收集了关于每个HystrixCcommand的一组度量。lystrix仪表板以高效的方式显示每个断踏器的运行伏况

引入依赖

<!--引入奈菲的熔断仪表盘监控依赖-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-netflix-hystrix-dashboard</artifactId>
</dependency>

主启动类添加注解,开启HystrixDashBord

@EnableHystrixDashboard//开启仪表盘监控

访问对应web界面地址

http://localhost:配置的端口/hystrix

BUG

  • web界面进入之后一直“loading”
  • JQuery版本过时,控制台某个方法报错-》修改jar包
  • 不用了!!

在这里插入图片描述

7、网关

7.1、什么是网关

网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等。

网关=路由转发+过滤器

路由转发:接收一切外界请求,转发到后端的微服务上去;

在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成

网关可以实现服务的统一管理

7.2、网关在微服务中的架构

在这里插入图片描述

7.3、网关组件

GateWay(SpringCloud)

引入网关依赖

<!--引入gateway-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

网关配置的方式

  • 通过配置文件的方式(推荐,比较直观)
  • 通过java代码的方式

网关路由规则

网关实现负载均衡

  • lb://PRODUCT #负载均衡 服务id PRODUCT

网关断言

网关过滤器

8、Config组件(统一配置中心)

8.1、定义

config(配置)又称为统一配置中心顾名思义,就是将配置统─管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个一个服务手动维护。

在这里插入图片描述

8.2、Config Server(服务端)

创建远程仓库

注意:远程仓库要公开

创建config服务端(SpringBoot模块),引入依赖

<!--config server-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
</dependency>

配置文件配置远程仓库连接地址

spring.cloud.config.server.git.uri=https://gitee.com/himatengfei/configs.git
spring.cloud.config.server.git.default-label=master

创建configclient(Config客户端)

  • 创建一个SpringBoot应用

  • 将配置文件交给远程仓库处理

  • 引入Config客户端依赖

    <!--引入config-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    
  • SpringBoot应用配置文件bootstrap.properties 配置文件进行配置(注意文件名称)

手动配置刷新

当远端git仓库中配置发生变化时,不需要重启微服务就可以直接读取远端修改之后配置信息,这种就叫手动配置刷新

  • 使用@RefreshScope 注解
  • 修改完远程仓库配置文件向各个微服务发送一个Post类型的请求(比较麻烦,引入BUS组件)

9、Bus组件(消息总线)

9.1、定义

  • springcloudbus使用轻量级消息代理将分布式系统的节点连接起来。然后,可以使用它来广播状态更改(例如配置更改)或其他管理指令。AQP和Kafka broker(中间件)实现包含在项目中。或者,在类路径上找到的任何springcloudstream绑定器都可以作为传输使用。
  • 通俗定义: bus称之为springcloud中消息总线,主要用来在微服务系统中实现远端配置更新时通过广播形式通知所有客户端刷新配置信息,避免手动重启服务的工作

在这里插入图片描述

9.2、利用Bus组件实现远端配置自动刷新

  • 在统一配置中心中引入Bus组件依赖

    <!--引入bus依赖-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
    
  • 配置配置文件

    • 通过bus组件连接rabbitmq服务

    • 在所有微服务中配置mq的连接,包括引入bus组件依赖、配置mq连接

    • 配置完成之后,其他所有引入Bus组件的微服务存在报错configServerRetryInterceptor ,原因就是项目还没来的及引入远程仓库的依赖

    • 解决方式在配置文件中进行如下配置:

      # 设置 启动时当远端信息还没有拉取完全时的失败是被允许的
      spring.cloud.config.fail-fast=true
      
    • 暴露路径,通过bus组件提供的一个post请求,能够自动刷新,实现其他微服务自动拉去远端配置

      http://localhost:8848/actuator/bus-refresh 注意必须是post请求

      # 暴露路径
      management.endpoints.web.exposure.include=*
      
    • 提问:怎么实现指定服务配置刷新

      http://localhost:8848/actuator/bus-refresh 路径名称后面知道微服务的id就可以实现知道服务配置刷新

9.3、利用webhooks实现配置自动刷新

在这里插入图片描述

在这里插入图片描述

  • netapp官网进行注册登录

    在这里插入图片描述

    在这里插入图片描述

  • 进行cmd命令启动natapp -authtoken=2cb0b20ab2b69cc3

    在这里插入图片描述

  • 配置webhooks(注意:每一次启动natapp.exe程序生成的公网域名都不一样)

  • 注意:存在bug,测试码云的webhooks报400错误

SpringCloudAlibaba

1、定义

spring cloud 阿里巴巴为分布式开发提供一了一站式解决方法

在这里插入图片描述

  • Sentinel:服务流量控制、服务降级、服务熔断
  • Nacos:服务注册中心、统一配置中心
  • event-driven:事件驱动,利用rocketMQ实现
  • message bus:消息总线(异步处理)
  • Seata:分布式事务
  • Dobbo:服务间通信

2、Nacos组件

Linux指令:find / -name java 全文搜索java相关

查看log日志:tail -f nacos.log

2.1、安装

  • 进入nacos官方文档进行下载(网速比较慢,建议百度网盘)
  • 将下载好的tar.gz 上传到linux中
  • 使用tar -zxvf 安装包 进行解压,注意事先需要安装jdk,因为nacos本质是一个SpringBoot应用
  • 启动nacos服务,默认启动方式是以集群的方式进行的启动
    • linux系统启动:在解压后的nacos目录进入bin目录,执行./startup.sh -m standalone
    • windows系统启动:在cmd窗口执行startup.cmd -m standalone 或者双击startup.cmd文件
  • 进入target查看nacos服务启动日志tail -f nacos.log
  • 默认端口8848(注意防火墙),用户名和密码nacos

2.2、搭建NacosClient(微服务)

  • 创建SpringBoot应用(maven)

  • 引入nacos依赖

    <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  • 创建主启动类,编写配置文件

    server.port=8081
    spring.application.name=NACOSCLIENT
    

配置服务注册中心地址

spring.cloud.nacos.server-addr=8.xxx.99.127:8848

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全注解下的SpringIoc 续3-属性文件的使用

在Spring Boot中使用属性文件&#xff0c;可以采用默认的application.properties文件&#xff0c;也可以使用自定义的配置文件&#xff0c;下面让我们一起来看看这两个的使用。 使用默认的application.properties文件 这个配置文件是Spring Boot默认会加载的&#xff0c;所以…

自动抓取QQ好友列表?Windows UIA教你轻松实现

目录&#xff1a;导读 引言 选择Windows UIA框架进行自动化测试的原因 查找窗口 读取QQ软件的好友列表 结语 引言 每个使用QQ的人都有自己的好友列表&#xff0c;但是如果你想要查看所有好友信息&#xff0c;手动一个个点击会非常浪费时间。那么有没有什么快速获取好友列…

【openGauss实战12】表空间管理

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

【总线】IIC学习笔记

【总线】IIC学习笔记 参考链接IIC总线介绍IIC总线时序1.空闲信号2. 启动信号与停止信号3.数据的有效性4.应答信号5.七位地址传输 IIC读写过程&#xff08;AT24C02举例&#xff09;IIC读过程IIC写过程 正点原子IIC驱动问题1、IIC停止信号问题2、IIC-AT24C02的器件地址发送的疑惑…

OJ搭建配置 功能速查手册

服务器配置 腾讯云 2H4G 5M 60GB 轻量应用服务器 承载大约 200~400人使用&#xff0c;经过压力测试&#xff0c;评测并发速度可满足130人左右的在线比赛。 系统镜像选 Ubuntu 22.04 LTS。 用户管理 一、批量导入&#xff08;从方便管理角度建议以 学生姓名 作为 用户名 &am…

网络安全之黄金票据,白银票据

前言&#xff1a;今天来给大家讲讲黄金票据和白银票据Kerberos认证#金票Golden ticket# 原理#伪造金票的场景和所需条件#利用方式#银票SILVER TICKET# 原理#伪造银票所需条件#金票和银票的区别# 获取的权限不同#认证流程不同#加密方式不同# 前言&#xff1a;今天来给大家讲讲黄…

Unity 3D 学习笔记(1)

文章目录 1.Unity 3D 概述2.Unity的安装过程3.Unity 3D 的项目管理4.Unity 3D 中的场景5.Unity 3D 的界面组成 1.Unity 3D 概述 Unity 3D简介&#xff1a;Unity 3D是虚拟现实行业中使用率较高的一款开发引擎&#xff0c;由Unity Technology公司开发。通过Unity&#xff0c;开发…

手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】

目录 手动实现 Spring 底层机制【初始化 IOC容器依赖注入BeanPostProcessor 机制AOP】 前面我们实际上已经用代码简单实现了 代码演示使用框架 创建一个maven项目 创建UserAction类 创建UserDao类 创建UserService类 创建beans.xml 说明 创建AppMain类 运行效果 如图…

《汇编语言》- 读书笔记 - 第2章-寄存器

《汇编语言》- 读书笔记 - 第2章-寄存器 2.0 8086CPU 寄存器段地址:偏移地址 2.1 通用寄存器2.2 字在寄存器中的存储2.3 几条汇编指令表2.1汇编指令举例表2.2 程序段中指令的执行情况之一问题 2.1表2.3 程序段中指令的执行情况之二问题 2.2 2.4 物理地址2.5 16位结构的CPU2.6 8…

数据埋点1

文章目录 1 什么是数据埋点2 为什么需要数据埋点3 数据埋点能采集哪些用户数据4 数据埋点的分类及方式5 主流的数据上报技术5.1 客户端上报5.2 服务端获取 1 什么是数据埋点 互联网的海量数据是通过数据埋点技术采集用户行为数据而产生的&#xff0c;用户行为数据采集及上报流…

我又不当程序员还要学Python吗?人工智能AI的出现我知道,我错了

Python&#xff08;可读音&#xff1a;派森&#xff09; 时代要淘汰你&#xff0c;连招呼都不会打&#xff01; 这句话近些年我们常在媒体上听到&#xff0c;有点残酷&#xff0c;但却又很现实。 最近&#xff0c;人工智能AI技术火爆全网&#xff0c;而且它所表现出来的“超…

浅谈Spring中的BeanFactory与FactoryBean

前言 理解FactoryBean是非常非常有必要的&#xff0c;因为在Spring中FactoryBean最为典型的一个应用就是用来创建AOP的代理对象&#xff0c;不仅如此&#xff0c;而且对理解Mybatis核心源码也非常有帮助&#xff01;如果甘愿crud&#xff0c;做个快乐的码农&#xff0c;那我就哦…

Springcloud--docker快速入门

认识docker docker相关操作 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…

『Linux』第九讲:Linux多线程详解(三)_ 线程互斥 | 线程同步

「前言」文章是关于Linux多线程方面的知识&#xff0c;上一篇是 Linux多线程详解&#xff08;二&#xff09;&#xff0c;今天这篇是 Linux多线程详解&#xff08;三&#xff09;&#xff0c;内容大致是线程互斥与线程同步&#xff0c;讲解下面开始&#xff01; 「归属专栏」Li…

剑指 Offer 54. 二叉搜索树的第k大节点【37】

难度等级&#xff1a;容易 上一篇算法&#xff1a; 226. 翻转二叉树【58】 力扣此题地址&#xff1a; 剑指 Offer 54. 二叉搜索树的第k大节点 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;剑指 Offer 54. 二叉搜索树的第k大节点 给定一棵二叉搜索树&#xff0c…

springboot第15集:MyBatis分页

我们在测试SQL的时候&#xff0c;要是能够在控制台输出 SQL 的话&#xff0c;是不是就能够有更快的排错效率&#xff1f; 是的&#xff0c;输出 SQL 可以帮助我们更好地理解代码的执行流程和结果。在控制台输出 SQL 可以让我们看到实际执行的 SQL 语句&#xff0c;这样就能够更…

武忠祥老师每日一题||定积分基础训练(一)

若积分区间相同&#xff0c;最常用的思想&#xff1a; 若 f ( x ) > g ( x ) , 则 ∫ a b f ( x ) > ∫ a b g ( x ) 若f(x)>g(x),则\int_{a}^{b}f(x)>\int_{a}^{b}g(x) 若f(x)>g(x),则∫ab​f(x)>∫ab​g(x) 但 是 往 往 等 号 只 是 在 有 限 个 点 成…

Java实现添加文字水印、图片水印功能

Java实现添加水印功能 添加水印Java 2D API介绍绘制文字水印绘制图片水印循环添加文字水印 添加水印 为图片添加水印的主要作用是保护图片版权&#xff0c;防止图片被未经授权的人使用或传播。为图片添加水印是一种常用的图片处理技术。在Java 中可以使用JDK自带的 Graphics2D …

快速上手Django(九) -Django下载文件、Django上传文件、Django实现excel导入导出

文章目录 快速上手Django(九) -django 上传文件request.FILES&#xff0c;下载文件一、Django下载文件1. Django下载文件方案和思路2. HttpResponse、StreamingHttpResponse和FileResponse区别和选择StreamingHttpResponse和FileResponse对象的对比和选择使用HttpResponse使用S…

浏览器安全之XSS跨站脚本

基本概念 跨站脚本&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种经常出现在Web应用程序中的计算机安全漏洞&#xff0c;是由于Web应用程序对用户的输入过滤不足而产生的。 攻击者利用网站漏洞把恶意的脚本代码&#xff08;通常包括HTML代码和客户端Javas…