SpringCloudAlibaba的学习

Updated on with 0 views and 0 comments

SpringCloudAlibaba的学习

SpringCloudAlibaba 简介

一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

SpringCloud 底层 SpringBoot 搭建

版本一一对应

image-20210825091816007

下面四个版本以及不维护了 所以 不用最新的 不稳定 使用 版本 Hoxton

SpringBoot 版本使用 2.3.9

image-20210825092239402

服务调用 Dubbo RPC 比较老了 使用 OpenFeign、RestTemplate

服务路由 Dubbo PROXY 不使用 使用 Spring Cloud Gateway

分布式消息使用消息中间件 RabbitMQ

负载均衡 使用 Ribbon 或者 Dubbo LB 都可以

这幅图是 Spring Cloud Alibaba 系列组件,其中包含了阿里开源组件,阿里云商业化组件,以及集成Spring Cloud 组件。

image-20210825092300706

网关 网飞 Zuul不用 用 Spring 的 Gateway 支持异步 性能高、扩展好

Alibaba OSS、fastDFS 存储文件

阿里开源组件

Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

RocketMQ:开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。

Dubbo:这个就不用多说了,在国内应用非常广泛的一款高性能 Java RPC 框架。

Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

Arths:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。

Nacos 概述

官方地址:https://nacos.io

github地址:https://github.com/alibaba/nacos

什么是 Nacos

阿里巴巴推出开源 推广生态 (注册中心 和配置中心)

更易于构建云原生应用的动态服务发现配置管理服务管理平台。

以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

为什么是 Nacos

常见的注册中心:

  1. Eureka(原生,2.0遇到性能瓶颈,停止维护)
  2. Zookeeper(支持,专业的独立产品。例如:dubbo)
  3. Consul(原生,GO语言开发)
  4. Nacos

相对于 Spring Cloud Eureka 来说,Nacos 更强大。

Nacos = Spring Cloud Eureka + Spring Cloud Config

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。

  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

可以干什么

Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。

Nacos主要提供以下四大功能:

  1. 服务发现和服务健康监测
  2. 动态配置服务
  3. 动态DNS服务
  4. 服务及其元数据管理

Nacos 快速开始

dubbo + zookeeper 提供者 Service 层 消费者 Controller 层 (服务治理)RPC

SpringCloud 微服务 每一个服务都是独立的可以被访问(dao、service、controller)http

结构图:

image-20210825093111969

Nacos 依赖 Java 环境 安装在 Linux 版本问题合适

ip a 查看 ip
远程连接
ssh root@192.168.159.130
# jdk 安装 配置 /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=/usr/local/jdk/jre
source profile
java -version
# 解压
tar -xvf -C 目录 进入bin目录 单机启动
sh startup.sh -m standalone
# nacos 端口 8848 netstat 查看端口
netstat -antp | grep 8848
# 安装 netstat 端口查看的工具
yum install -y net-tools
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 永久关闭
systemctl disable firewalld

ip:8848/nacos 用户名 密码 nacos

image-20210825192927782

依赖

SpringBoot 版本 2.3.9 一定要加 RELEASE 不加 加载不到

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

spring cloud、alibaba依赖

```xml
<!-- SpringCloud的依赖 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Spring web

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

nacos-discovery

<!-- Spring Cloud 客户端依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

主启动类加注解 EnableDiscoveryClient

提供者

server:
  port: 9001
spring:
  application:
    name: provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.159.130:8848

View-Services-SpringBoot 运行

image-20210825203448066

消费者 可以直接复制

Edit Configuration 复制

修改端口 VM -Dserver.port

image-20210825203747625

openfeign 实现远程调用需要的组件

<!-- 实现远程调用的组件-->
<!-- 接口 + 注解 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

接口+注解 FeignClient(name= "provider")name 表示要调用哪个应用

复制方法名 RequestMapping(路径)方法

/**
 *  name 表示要调用哪个应用的模块
 */
@FeignClient(name = "provider")
public interface ConsumerFeign {

    // 调用 showMsg 就是调用 provider 应用中对应路径
    @RequestMapping("/provider/msg")
    public String showMsg();
}

Controller

@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @Autowired
    private ConsumerFeign consumerFeign;

    @RequestMapping("/getMsg")
    public String getMsg() {
        // 远程调用获取的数据
        String showMsg = consumerFeign.showMsg();
        System.out.println("远程调用的数据:"+showMsg);
        return "远程调用的数据:"+showMsg;
    }
}

开启 Feign EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {
	public static void main(String[] args) {
		SpringApplication.run(NacosConsumerApplication.class, args);
	}
}

404 路径错误

端口写到提供者

image-20210825103313272

默认 负载均衡 轮询的方式

配置中心

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。

如果微服务架构中没有使用统一配置中心时,所存在的问题:

  • 配置文件分散在各个项目里,不方便维护
  • 配置内容安全与权限
  • 更新配置后,项目需要重启

nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。

Data ID: 项目名字

Groups:DEFAULT_GROUP

描述:

配置格式:YAML、Properties

配置内容:appName=providerApp

从 配置中心读取配置 要求 必须有相应的配置文件 bootstrap.yml 没有会异常

依赖 nacos-config

<!-- 从配置中心读取配置, 要求:必须有对应的配置文件 bootstrap.yml,没有则异常-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

bootstrap.yml 只需要加入 配置中心地址、name DataID(和项目同名 可省略)、file-extension 文件后缀(properties 可以省略)

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.159.130:8848
        name: provider    # 配置中心 的 DataID 和项目同名 可省
        file-extension: properties    # 配置中心 DataID 后缀 默认 properties 可省
  application: provider  

RefreshScope // 刷新的区域 读取配置中心的数据 Value 从云端获取配置数据

命名空间

在实际开发中,通常有多套不同的环境(默认只有public),那么这个时候可以根据指定的环境来创建不同的 namespce,例如,开发、测试和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。以此来实现多环境的隔离。

命名空间 新建命名空间

image-20210825220756246

加入 namespace 工作空间的切换 如果 public 可以省略 值为UUID

namespace: 16ab4986-fe2c-497c-b9e0-9a4f83893e62 # 工作空间 public 可省

多个配置文件

同时加入

 # 扩展配置文件 Data-id 字段 refresh 自动刷新
ext-config[0]:
  data-id: redis.properties
  refresh: true
ext-config[1]:
  data-id: mysql.properties
  refresh: true

配置分组

在实际开发中,除了不同的环境外。不同的微服务或者业务功能,可能有不同的redis及mysql数据库。

区分不同的环境我们使用名称空间(namespace),区分不同的微服务或功能,使用分组(group)。

当然,你也可以反过来使用,名称空间和分组只是为了更好的区分配置,提供的两个维度而已。

扩展读取方式 分组 Group

ext-config[0]:
  data-id: redis.properties
  group: 组名 #(DEFAULT_GROUP可省)
  refresh: true
ext-config[1]:
  data-id: mysql.properties 
  group: 组名
  refresh: true
namespace: ......

使用动态 ip onboot = yes 重启网卡 systemctl restart network 这样 网段改变 ip照样可用

服务网关Gateway

对外暴露端口越多 安全性越低

并联 中间件 做安全网关统一鉴权(分用户身份访问)、搭集群(应对订单微服务应对双十一,负载均衡)、请求过滤限流(Tomcat优化1s2000,没优化几百,限流每秒只处理规定数量请求,保护微服务)

image-20210825223404980

SpringBoot Routing 中的 Gateway

网关作为客户端存在

依赖 springcould、alibaba、gateway、nacos-discovery

<dependencies>
<!-- gateway 依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<!-- nacos 客户端 依赖 网关作为客户端存在-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

</dependencies>

<!-- SpringCloud的依赖 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

主启动类 开启 注解 EnableDiscoveryClient

配置

cloud 写成 could 错误

server:
  port: 8888
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.159.130:8848
    # 网关的配置
    gateway:
      routes:
        - id: nacos-provider-id
          uri: lb://provider
          predicates: # 断言 匹配断言的内容,才会匹配过滤器
            - Path=/api/provider/** # 一颗星一个路径 ** 表示多个路径
          filters:
            # - StripPrefix=1 # 去除第一个访问路径
            # - PrefixPath=/app #添加访问前缀
            # 删除 api 的路径
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: nacos-consumer-id
          uri: http://localhost:9002
          predicates: # 断言 匹配断言的内容,才会匹配过滤器
            - Path=/api/consumer/**
          filters:
            - StripPrefix=1 # 去除第一个访问路径

  application:
    name: gateway

ctrl+alt+b 查看实现类

GatewayFilterFactory 的实现类

主要Path 路径过滤器

三个常用:

StripPrefixGatewayFilterFactory 去除第一个访问路径

PrefixPathGatewayFilterFactory 添加访问前缀

RewritePathGatewayFilterFactory 重写

负载均衡

uri 不写死

# lb ==> loadBalance
uri: lb://provider

loadBalance 好处 扩展 服务时候 直接加入即可 无需配置网关

uri 不稳定

网关全局过滤

全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比
如权限认证,IP 访问限制等等。

注意:只有被Path匹配到的路径才会走过滤器

定义过滤器类

AuthFilter implements GlobalFilter,Ordered

GlobalFilter 全局过滤器

Ordered 执行顺序 返回值越小 越先执行

注解 Configuration

exchange 可以获取两个重要的对象 request 和 response

image-20210825150136997

@Configuration
public class AuthFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 方法应用 获取的请求头 或 请求参数中是否有 token ==> 令牌字符串
        // 有则放行
        // 没有则拦截
        ServerHttpResponse response = exchange.getResponse();
        ServerHttpRequest request = exchange.getRequest();
        // 获取参数
        String tokenByHeader = request.getHeaders().getFirst("token");
        String tokenByParams = request.getQueryParams().getFirst("token");
        if(StringUtils.isEmpty(tokenByHeader) && StringUtils.isEmpty(tokenByParams)) {
            // 拦截
            response.setStatusCode(HttpStatus.UNAUTHORIZED); // 401 表示没有认证
            // 没有响应体的拦截
            //return response.setComplete();
            // 有响应体的拦截
            response.getHeaders().add("Content-type","application/json;charset=UTF-8");

            Map<String,String> map = new HashMap<>();
            map.put("code","401");
            map.put("msg","无认证信息");
            map.put("login","http://login.html");

            // fastjson  map 转 json字符串
            String json = JSON.toJSONString(map);

            DataBuffer buffer = response.bufferFactory().wrap(json.getBytes());
            return response.writeWith(Mono.just(buffer));
        } else {
            // 放行
            return chain.filter(exchange);
        }

    }

    @Override
    public int getOrder() {
        return 0;
    }
}

总结

Nacos 三步注册操作
1.引入依赖:SpringCloud、SpringCloudAlibaba、starter-web、starter-alibaba-nacos-discovery
2.主启动类 开启 注解 EnableDiscoveryClient
3.配置文件 server.port、spring.application.name、spring.cloud.nacos.discovery.server-addr
OpenFeign实现远程调用
1.引入依赖:加入远程调用组件 starter-openfeign
2.主启动类 开启 注解 EnableFeignClients
3.接口+注解的格式 注解 FeignClient(name=应用名) RequestMapping方法注解 全路径
配置中心
1.引入依赖:starter-alibaba-nacos-config
2.创建配置文件bootstrap.yml 
配置内容:spring.application.name、spring.cloud.nacos.config.server-addr(namespace、name、file-extension)
扩展配置 ext-config[0]:
		  data-id:
		  group:
		  refresh:
网关 隐藏对应端口、权限管理(鉴权)、限流、集群负载均衡
1.配置文件 spring.cloud.gateway.routes:- id、uri(lb://应用名 load Balance)、predicates(断言- Path)、filters(- StripPrefix、- PrefixPath、RewritePath)

全局过滤 实现 GlobalFilter、Ordered

Nacos 包含了注册中心、监控中心、配置中心 功能强大 服务熔断(限流 降级 回调) sentinel 网关 gateway 服务调用 Ribbon、OpenFeign、分布式事务 Seata、消息驱动 RocketMQ RabbitMQ、Arths 服务监控

注意:只有被Path匹配到的路径才会走过滤器

配置最下面增加 nacos-all-id 范围从小到大写 匹配到 下面不匹配

image-20210826093208426

Sentinel

分布式系统的流量防卫兵

翻译 哨兵

Sentinel 是什么?

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 的历史:

  • 2012 年,Sentinel 诞生,主要功能为入口流量控制。
  • 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。
  • 2018 年,Sentinel 开源,并持续演进。
  • 2019 年,Sentinel 朝着多语言扩展的方向不断探索,推出 C++ 原生版本,同时针对 Service Mesh 场景也推出了 Envoy 集群流量控制支持,以解决 Service Mesh 架构下多语言限流的问题。
  • 2020 年,推出 Sentinel Go 版本,继续朝着云原生方向演进。

Sentinel 分为两个部分:

  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。

基本概念及作用

基本概念:

资源:是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名(方法头的内容),URL,甚至服务名称作为资源名来标示资源。

规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

主要作用:

  1. 流量控制
  2. 熔断降级 (重要)
  3. 系统负载保护

我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:

  1. 定义资源
  2. 定义规则
  3. 检验规则是否生效

先把可能需要保护的资源定义好,之后再配置规则。也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。

快速开始

官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

搭建Dashboard控制台

您可以从 release 页面 下载最新版本的控制台 jar 包。

https://github.com/alibaba/Sentinel/releases

下载的jar包(课前资料已下发),copy到一个没有空格或者中文的路径下,打开dos窗口切换到jar包所在目录。

执行:java -jar sentinel-dashboard-xxx.jar 默认端口是 8080

更改:java -jar sentinel-dashboard-xxx.jar --server.port=端口号

进入登录页面(http://localhost:8080/#/dashboard),

管理页面用户名和密码:sentinel/sentinel

sentinel是懒加载的,如果服务没有被访问,也看不到该服务信息。

改造nacos-consumer

  1. 引入 sentinel 依赖

使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-sentinel 的 starter。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  1. 在application.yml中添加配置
spring:
  cloud:  
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719

重启nacos-consumer工程,在浏览器中反复访问 consumer

再次查看sentinel控制台页面:

以 s 为单位 QPS=queries per second

服务雪崩

a、b、c 级联调用调用出错

容错方案

防止坑队友 卖

隔离方案

服务系统分割若干个模块,各模块相互独立,故障发生时候,将问题隔离在某个模块内部,不扩散,不影响整体系统服务,常见:线程隔离和信号量隔离

超时方案

设置一个最大响应时间,超过时长,自动断开连接、释放掉线程

限流方案

image-20210826103615981

快速失败 达到阈值 拒绝

warm up 预热时常 慢慢往上增

排队等待 超时时间 计算一个请求时间,来到的请求 超过等待时间就不请求了 如 1s 10个请求 超时时间是2s 则1s来的超过20个请求会失效

关联 和 链路 微服务之间的关系

线程数 表示同一时间访问的线程 代码中的线程

熔断方案

熔断器

关闭状态

开启状态 执行本地的fallback方法

半熔断状态

熔断后 一般等1分钟,尝试回复服务调用,允许有限流量调用服务,监控成功率,达到预期则恢复,否则继续熔断

降级方案

相当于 B 计划

image-20210826105132422

RT Reaction Time

如:

最大RT:600毫秒 比例:0.5 熔断时长:100秒。最小请求数:10

问:

如果当前请求数量10,超出最大RT的请求数6个,会熔断

如果当前请求数量10,超出最大RT的请求数4个,不会熔断

如果当前请求数量9,超出最大RT的请求数8个,不会熔断

使用 Postman 测试 保存访问请求路径

进行 Run 测试 设置 Iterations 50 Delay 10 ms

Blocked by Sentinel (flow limiting)已被熔断

开启、关闭、半开启状态(1分钟后自动开启)

代码测试

三步骤

一、增加 openfign 远程调用 组件依赖、增加 sentinel 依赖

二、配置

# 开启服务降级
feign:
  sentinel:
    enable: true

三、接口、实现类

@FeignClient(name="provider,fallback=降级实现类.class)
@Component
public class ConsumerFeignImpl implements ConsumerFeign {

    @Override
    public String showMsg() {
        return "降级服务的方法调用!";
    }
}

当提供者提供不了 会执行降级

等1分钟 在请求提供者 如果此时提供者恢复了 则自动调用 恢复正常

持久化配置

重启应用就没了

使用 nacos 配置中心

加入依赖

nacos-config、sentinel-datasource-nacos

配置

[
    {
        "resource": "/consumer/getMsg",
        "limitApp": "default",
        "grade": 1,
        "count": 2,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

image-20210826112822302

server:
  port: 9002
spring:
  application:
    name: consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.159.130:8848

    sentinel:
      transport:
        dashboard: localhost:8080
      datasource:
        consumer:
          nacos:
            server-addr: 192.168.159.130:8848
            dataId: consumer-sentinel-rules
            groupId: DEFAULT_GROUP
            data-type: json
            rule_type: flow

# 开启服务降级
feign:
  sentinel:
    enabled: true

Sleuth

分布式追踪服务 知道具体每个微服务花费的时长

zipkin

分布式监控客户端 端口 9411

zipkin 链路监控组件

依赖 zipkin

<!-- zipkin 链路监控 的依赖 包含 sleuth-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

配置

提供者

zipkin:
  base-url: http://localhost:9411
  sender:
    type: web
  discovery-client-enabled: false # 发现不可用客户端为 false

消费者 也 配置 依赖 与 yml 文件

微服务 没有固定的提供者、消费者 不像 Dubbo 是固定的 微服务根据情况 可互相调用 身份切换

Server Start、Finish

localhost:9411/zipkin


标题:SpringCloudAlibaba的学习
作者:HB2Ocean
地址:http://future-hb.top:8080/articles/2021/08/29/1630241194508.html