文章目录
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 中创建配置文件
-
命名规则:service-edu-dev.properties
-
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 获取多配置文件
- 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