SpringCloud(五)Zuul网关与Config配置

1. Zuul:路由网关

什么是Zuul

Zuul包含了对请求的路由的过滤两个最主要的功能:

其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进程干预,是实现请求校验,服务聚合的功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,以后的访问微服务都是通过Zuul跳转后获得。

注意:Zuul服务最终还是会注册进Eureka

提供:代理 + 路由 + 过滤 三大功能

Zuul能干什么

  • 路由
  • 过滤

官网文档:http://github.com/Netflix/zuul

  • 创建先的module:springcloud-zuul-9527
  • 添加pom.xml依赖
<dependencies>
    <!--Zuul-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zuul</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    <!--Dashboard,Hystrix监控页面-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    <!--Hystrix-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    <!--Ribbon-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    <!--Eureka-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    <!--实体类-->
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>springcloud-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--web依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--热部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>
  • 创建主启动类:ZuulApplication_9527.java
@SpringBootApplication
@EnableZuulProxy // 开启代理
public class ZuulApplication_9527 {

    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication_9527.class,args);
    }

}

  • 创建application.yml
server:
  port: 9527

spring:
  application:
    name: springcloud-zuul

eureka:
  client:
    # 服务集群地址
    service-url:
      defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
  instance:
    instance-id: zuul9527.com
    prefer-ip-address: true
zuul:
  # 配置路由
  routes:
    # 原访问路径
    mydept.serviceId: springcloud-provider-dept
    # 新访问路径
    mydept.path: /mydept/**
  # 隐藏全部微服务名
  ignored-services: "*"
  # 设置公共的前缀
  prefix: /levn

总结:zuul路由的的作用是配置访问地址,隐藏真实服务地址,同时可以过滤一些请求。

2. Config:Git环境搭建

分布式系统面临的--配置问题的问题

微服务意味着要单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所有一套集中式的,动态的配置管理设施是必不可少的。

SpringCloud提供的ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,那上百的配合文件要修改起来很麻烦。

什么是SpringCloudConfig分布式配置中心

SpringCloudConfig为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环节提供了一个中心化的外部配置

SpringCloudConfig分为服务端客户端两部分。

服务端也称为 分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并位客户端提供获取配置信息、加密、解密信息等访问接口。

客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理。并且可以用过git客户端工具来方便管理和访问配置内容。

SpringCloudConfig分布式配置中心能干什么

  • 集中管理配置文件
  • 不同环境,不同配置,动态化的配置更新,分环境部署,比如 /dev /test /prod /beta /release
  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息。
  • 当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置
  • 将配置信息以REST接口的形式暴露

SpringCloudConfig分布式配置中心与GitHub整合

由于SpringCloudConfig默认使用git来存储配置文件(也有其他方式,比如支持SVN和本地文件),但是最推荐的还是git,而且使用的是HTTP/HTTPS访问的形式

  • 电脑安装git,下载地址:https://git-scm.com/download/win
    • 根据系统不同,自行选择
  • 注册码云账号:https://gitee.com/
    • 新建仓库
    • 仓库名称:springcloud-config
    • 仓库介绍:随便填写
    • 是否开源:选择公开
    • 选择语言:Java
    • 添加.gitignore:Java
    • 添加开源许可证:GPL 3.0
    • 勾选使用Readme文件初始化这个仓库
    • 点击:创建
  • 将仓库文件拉取到本地
    • 复制HTTPS的克隆地址
    • 打开本地要存放的文件夹
    • 鼠标右键,点击:Git Bash Here
    • 输入:git clone 复制的克隆地址
      • 回车
  • 在克隆好的文件夹中新建application.yml
spring: 
    profiles:
        active: dev
        
---
spring:
    profiles: dev
    application:
        name: springcloud-config-dev
        
---
spring:
    profiles: test
    application:
        name: springcloud-config-test
  • 将文件提交到本地并推送到远端

3. Config:服务端连接Git配置

  • 新建module:springcloud-config-server-3344
  • 添加pom.xml依赖
<dependencies>
    <!--Config-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <!--web依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--热部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>
  • 创建application.yml
server:
  port: 3344

spring:
  application:
    name: springcloud-config-server
    # 连接远程仓库
  cloud:
    config:
      server:
        git:
          # https, 不是git
          uri: 远端git仓库地址
  • 创建主启动类Config_Server_3344
@SpringBootApplication
@EnableConfigServer
public class Config_Server_3344 {
    public static void main(String[] args) {
        SpringApplication.run(Config_Server_3344.class,args);
    }
}
spring:
  application:
    name: springcloud-config-dev
  profiles:
    active: dev