1.SpringCloud Alibaba

1.1简介

  • Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 SpringCloud 编程模型轻松使用这些组件来开发分布式应用服务。

  • 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
    https://github.com/alibaba/spring-cloud-alibaba

1.2为什么使用

  • SpringCloud 的几大痛点
    • 部分组件停止维护和更新
    • 部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制
    • 配置复杂,难以上手,部分配置差别难以区分和合理应用
  • SpringCloud Alibaba 的优势:
    • 性能强悍,设计合理,完善的可视化界面,搭建简单,学习曲线低。
  • 结合 SpringCloud Alibaba 我们最终的技术搭配方案:
  • SpringCloud Alibaba - Nacos:注册中心(服务发现/注册)
  • SpringCloud Alibaba - Nacos:配置中心(动态配置管理)
  • SpringCloud - Ribbon:负载均衡
  • SpringCloud - Feign:声明式 HTTP 客户端(调用远程服务)
  • SpringCloud Alibaba - Sentinel:服务容错(限流、降级、熔断)
  • SpringCloud - Gateway:API 网关(webflux 编程模式)
  • SpringCloud - Sleuth:调用链监控
  • SpringCloud Alibaba - Seata:原 Fescar,即分布式事务解决方案

1.3版本选择

  • 1.5.x 版本适用于 Spring Boot 1.5.x
  • 2.0.x 版本适用于 Spring Boot 2.0.x
  • 2.1.x 版本适用于 Spring Boot 2.1.x

1.4导入依赖 —common

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

2.Alibaba-Nacos注册中心

  1. 下载nacos应用
  2. 启动nacos
  3. 将微服务注册到 nacos 中
    • 导入依赖 — common模块
      1
      2
      3
      4
      <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
    • 在服务的yaml文件添加
      1
      2
      3
      4
      5
      6
      7
      spring:
      cloud:
      nacos:
      discovery:
      server-addr: 127.0.0.1:8848
      application:
      name: gulimall-coupon
    • 启动类添加@EnableDiscoveryClient注解
    • 127.0.0.1:8848/nacos查看
  4. 测试使用 feign 远程调用
    • 导入依赖 — 创建模块时导入过
      1
      2
      3
      4
      <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
    • 创建feign包专门存放feign接口
    • 在启动类添加@EnableFeignClients(basePackages = “feign包的全限定名”)
    • 创建feign接口
      1
      2
      3
      4
      5
      6
      @FeignClient("gulimall-ware")
      public interface WareFeignService {

      @PostMapping("/ware/waresku/skus")
      public R skuWareInfos();
      }

3.Alibaba-Nacos配置中心

3.1简单案例

  1. 导入依赖
    1
    2
    3
    4
    5
    <!-- nacos配置中心 -->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
  2. 添加boorscrap.properties
    1
    2
    spring.application.name=coupon
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  3. 在nacos中新建配置 — id:服务名.properties
  4. 动态获取配置
    • @RefreshScope 动态获取并刷新配置 —启动类上
    • @Value(“${配置项名}”):获取到配置 — 属性上
    • 配置中心 > 当前应用配置

3.2命名空间与分组

  1. 命名空间:配置隔离 — spring.cloud.nacos.config.namespace=空间id
    • 默认public
    • 用来对开发,生产,测试环境进行隔离
    • 对每个微服务进行隔离
  2. 配置集:所有配置的集合
  3. 配置集ID:类似文件名
  4. 配置分组:类似文件夹 — spring.cloud.nacos.config.group=分组名
    • 默认:DEFAULT_GROUP

3.2加载多个配置集

  • 在bootscript中添加
    1
    2
    3
    spring.cloud.nacos.config.ext-config[0].data-id=datasoutce.yaml
    spring.cloud.nacos.config.ext-config[0].group=dev
    spring.cloud.nacos.config.ext-config[0].refresh=true

4.Gateway网关

4.1简介

  • 网关作为流量的入口,常用功能包括路由转发、权限校验、限流控制等。而 springcloud gateway作为 SpringCloud 官方推出的第二代网关框架,取代了 Zuul 网关。
  • 当请求到达网关,网关利用断言来判断请求是否符合路由规则,如果符合,就会经过一系列过滤器,然后到达指定地方
  • 官方文档地址:
  • Spring Cloud Gateway 特点:
    • 基于 Spring5,支持响应式编程和 SpringBoot2.0
    • 支持使用任何请求属性进行路由匹配
    • 特定于路由的断言和过滤器
    • 集成 Hystrix 进行断路保护
    • 集成服务发现功能
    • 易于编写 Predicates 和 Filters
    • 支持请求速率限制
    • 支持路径重写

      4.2创建&测试Api网关

  1. 创建gulimall-gateway模块 — 选择gateway
  2. 依赖common模块 — 注意boot和cloud版本要一致
  3. 注册发现和配置中心
  4. 配置路由规则
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    spring:
    cloud:
    nacos:
    discovery:
    server-addr: 127.0.0.1:8848
    gateway:
    routes:
    - id: baidu_route
    uri: https://www.baidu.com
    predicates:
    - Query=url,baidu

    - id: qq_route
    uri: https://www.qq.com
    predicates:
    - Query=url,qq

    application:
    name: gulimall-gateway

    server:
    port: 88
  5. 启动服务出现以下错误:
    • Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
    • 这是因为依赖了common模块,而没有配置数据库的数据源导致的
    • 解决:在启动类添加@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
  6. http://localhost:88/hello?url=baidu