文章目录

  • 1. Spring Cloud 相关基础服务组件
  • 2. Spring Cloud GateWay
  • 2.1 简介
  • 2.2 Idea 实现
  • 3. 配置中心(Nacos)
  • 3.1 简介
  • 3.2 读取配置中心的配置文件
  • 3.3 名称空间切换环境
  • 3.4 获取多配置文件

1. Spring Cloud 相关基础服务组件

  • 服务发现——Netflix Eureka (Nacos)
  • 服务调用——Netflix Feign
  • 熔断器——Netflix Hystrix
  • 服务网关——Spring Cloud GateWay
  • 分布式配置——Spring Cloud Config (Nacos)
  • 消息总线 —— Spring Cloud Bus (Nacos

2. Spring Cloud GateWay

2.1 简介

  • 在客户端和服务端中间有一面墙,可以起到作用很多,比如请求转发、负载均衡、权限控制等等;所有的外部请求都会先经过网关这一层;
  • Spring Cloud Gateway 旨在为微服务架构提供简单、有效和统一的API路由管理方式;
  • Spring Cloud 几个重要名词:路由断言过滤器
  • 负载均衡的方式:轮询、权重、最少响应时间

2.2 Idea 实现

  • 引入依赖 pom.xml
<dependencies>
        <dependency>
            <groupId>com.atguigu</groupId>
            <artifactId>common_utils</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- 网关核心依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!--gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>

        <!--服务调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
  • 启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ApiGatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayApplication.class, args);
    }
}
  • 配置文件 application.properties
# 服务端口
server.port=8222
# 服务名
spring.application.name=service-gateway
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true

#设置路由id
spring.cloud.gateway.routes[0].id=service-acl
#设置路由的uri   lb://nacos注册服务名称
spring.cloud.gateway.routes[0].uri=lb://service-acl
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/*/acl/**

#配置service-edu服务
spring.cloud.gateway.routes[1].id=service-edu
spring.cloud.gateway.routes[1].uri=lb://service-edu
spring.cloud.gateway.routes[1].predicates= Path=/eduservice/**

#配置service-edu服务
spring.cloud.gateway.routes[2].id=service-msm
spring.cloud.gateway.routes[2].uri=lb://service-msm
spring.cloud.gateway.routes[2].predicates= Path=/edumsm/**

项目中,所有的微服务端口都可以通过 localhost:8022 端口访问

3. 配置中心(Nacos)

3.1 简介

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

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

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

3.2 读取配置中心的配置文件

  • 在Nacos 中创建配置文件
  • springcloud的nacos用户名密码_springcloud

  • 命名规则:service-edu-dev.properties
  • springcloud的nacos用户名密码_springcloud_02

  • 3、springboot 配置文件加载顺序
- 这里主要是说明application和bootstrap的加载顺序。
  - bootstrap.yml(bootstrap.properties)先加载
  - application.yml(application.properties)后加载
  - bootstrap.yml 用于应用程序上下文的引导阶段。
  - bootstrap.yml 由父Spring ApplicationContext加载。
  - 父ApplicationContext 被加载到使用 application.yml 的之前。
  • 在Idea 中引入依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>
  • 创建 bootstrap.properties 配置文件
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.profiles.active=dev

# 该配置影响统一配置中心中的dataId
spring.application.name=service-statistics

3.3 名称空间切换环境

  • 创建命名空间(开发环境 dev、测试环境 test、生产环境 prod)

3.4 获取多配置文件

springcloud的nacos用户名密码_配置文件_03

  • Idea 配置文件
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.profiles.active=dev

# 该配置影响统一配置中心中的dataId
spring.application.name=service-statistics

spring.cloud.nacos.config.namespace=fffcbc78-504b-4cae-b9a2-3f50e0c2c4ef

spring.cloud.nacos.config.ext-config[0].data-id=port.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
spring.cloud.nacos.config.ext-config[0].refresh=true