1.Zuul是什么
Zuul包含了对请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.
Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
注意:Zuul服务最终还是会注册进Eureka
提供=代理+路由+过滤三大功能
官网地址:https://github.com/Netflix/zuul/wiki/Getting-Started
1.1pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
1.2 注解启动类
@EnableZuulProxy
设置前缀
zuul:
prefix: /atguigu
ignored-services: "*"
routes:
mydept.serviceId: microservicecloud-dept
mydept.path: /mydept/**
2.SpringConfig是什么
在实际操作中会出现多个微服务操作同一个数据库的情况,那么对于每个微服务都需要重复配置数据库信息,而且当数据库信息改动时也难以维护。因此一套集中的、动态的配置管理设施是必不可少的。
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。SpringCloud Config 具体分为客户端和服务端两部分。
具体作用:
集中管理配置文件;
不同运行环境不同的配置,动态化地进行配置更新,分环境部署(dev/test/prod/release)
运行期间动态调整配置,不需要在每个服务部署的机器上编写配置文件,配置变动各个微服务能够自动拉取信息
2.1、配置中心服务器端搭建
- SpringCloud Server使用Git 作为远程的配置文件仓库存储地址,我们需要先在远程建立好仓库
- 引入pom
<!-- SpringConfig Server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
- 修改yml
spring:
application:
name: cloud-config-server
cloud:
config:
server:
git: #配置远程仓库的地址
uri: https://gitee.com/loserii/my_-spring-cloud_config.git
password: xjxhhxjava2048
username: loserii
search-paths: xxxxx #git仓库下相对搜索地址
label: master #配置远程分支名
- 配置完成后启动服务,本地通过HTTP请求访问远程仓库上的配置文件时遵循以下格式的请求资源:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
{label} 作为远程仓库的分支;
{application}-{profile} 作为远程仓库上的配置文件名,比如config-test.yml
- 此外还可以配置多个存储库,配置相应的匹配规则来读取文件
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
repos:
simple: https://github.com/simple/config-repo
special:
pattern: special*/dev*,*special*/dev*
uri: https://github.com/special/config-repo
local:
pattern: local*
uri: file:/home/configsvc/config-repo
pattern表示模式匹配,是带有通配符{application}/{profile}名称的逗号分隔列表。如果pattern不匹配任何模式,那么它就会使用spring.cloud.config.server.git.uri下的默认uri。
2.2配置中心客户端搭建
3.1 配置同步机制介绍
客户端通过SpringCloud Config Server来获取到远程的Config环境配置,但是如果想要自己定义一些额外的配置,就需要另外创建一个配置文件。
客户端项目中包含两种配置文件:application.yml(用户级的资源配置项)、bootstrap.yml(系统级的资源配置项,优先级更高)
SpringCloud 会创建一个 Bootstrap Context上下文,该上下文作为 Application Context的父上下文。初始化的时候,Bootstrap Context负责从外部源加载配置属性并且解析配置。这两个上下文共享一个从外部获取的Environment。
-
什么是Environment?
Environment用于存储服务器的配置数据,管理此行为的是EnvironmentRepository。Environment是Spring Environment(包括PropertySources作为主要功能)的域的浅层副本。Environment资源由三个变量参数化: -
{application}映射到客户端的spring.application.name;
-
{profile}映射到客户端上的 spring.profiles.active;
-
{label}标记版本这一组件;
2.2.1 详细配置
客户端从配置服务中心获取配置。
修改 pom.xml、bootstrap.yml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring:
application:
name: ConfigCenterClient
cloud:
config:
fail-fast: false #客户端连接失败时开启重试,需要结合spring-retry、spring-aop
label: master #获取配置文件的分支名
name: config #获取的文件名
profile: test #文件后缀
uri: http://localhost:3344 #配置中心服务端地址
注意与eureka、cloud相关的配置需要放在bootstrap.yml文件中,程序启动时会先读取bootstrap.yml然后再读取application.yml
分布式下的问题
测试时发现当在远程仓库修改配置文件数据后,本地的SpringCloud Config Server能够在不重启的情况下接收到新配置,但是本机的SpringCloud Config Client就不能直接获取,必须进行重启。这在微服务很多时是不方便处理的。
解决方法: 客户端向外部暴露监控的端点,结合@RefreshScope注解来解决