【SpringCloud学习】Zuul路由网关、Config远程配置统一管理

Zuul路由网关

什么是Zuul?

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

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

请添加图片描述
请添加图片描述

Zuul也就是充当API Gateway

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

所有微服务都通过同一个地址前缀和通过服务名调用服务
隐藏真实服务名,另起名字

1、导入pom.xml依赖

<!--zuul-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

2、修改yml配置,注册到eureka中心,且发现服务,配置zuul路由,使得服务名不暴露,用指定的路径访问。

server:
  port: 9527

spring:
  application:
    name: springcloud-zuul

eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: zuul9527.com
    prefer-ip-address: true  #可以将Ip隐藏

info:
  app.name: freeze-springcloud
  company: freeze.com
zuul:
  routes:
    mydept.serviceId: springcloud-provider-dept
    mydept.path: /service8001/**
  ignored-services: "*" #忽略我们的服务名,就只能通过我们定义的名字访问服务, *代表忽略全部
  prefix: /freeze #公共前缀

3、开启功能@EnableZuulProxy

—————————————————————————————————

SpringCloud config

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

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,每一个微服务都自带一个application.yml,那上百个的配置文件要修改起来就很麻烦。

请添加图片描述

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

Spring Cloud Config分为服务端和客户端两部分:

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

如果配置中心出现了问题,将导致灾难性的后果,因此在生产环境下配置中心都会做集群,来保证高可用。此处配置高可用实际就是把多个配置中心(指定同一个 Git 远程仓库)注册到注册中心。

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

SpringCloud config分布式配置中心的作用

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

SpringCloud config分布式配置中心与github整合

由于Spring Cloud Config 默认使用Git来存储配置文件(也有其他比如SVN),Git使用的是http/https访问的形式。

配置Git

1、下载Git客户端

2、在gitee新建个仓库

3、配置git config

$ git config --global user.name "freeze"
$ git config --global user.email [email protected]

4、生成公钥,并放到gitee上

$ ssh-keygen -t rsa -C "[email protected]"

请添加图片描述

请添加图片描述

5、输入命令 拉取仓库代码

git clone [email protected]:guo-jiebin/springcloud-config.git

请添加图片描述

更新仓库步骤:

1、git add .

2、$ git status查看文件状态

3、$ git commit -m "first commit"添加信息 不能少这个步骤

4、$ git push origin masterorigin选择当前用户 master是分支

通过config-server 可以连接到Git 访问其中的资源以及配置

请添加图片描述

将配置放到git统一管理,配置与代码解耦

Config实例

一、先编写Config服务端 springcloud-config-server-3344

1.1导入pom.xml文件,注意config包不要导错

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

1.2编写配置

server:
  port: 3344

spring:
  application:
    name: springcloud-config-server-3344
  #连接远程仓库
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/guo-jiebin/springcloud-config.git

主要是连接远程仓库

1.3开启功能 @EnableConfigServer

二、新创建个服务Eureka注册中心springcloud-config-eureka-7001

注意config是客户端

2.1配置Pom.xml

  <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>

2.2添加bootstrap.yml配置,连接config服务端 获取配置

name是配置文件名 uri是服务端地址 label是分支 profile选择配置

spring:
  cloud:
    config:
      uri: http://localhost:3344
      name: config-eureka
      label: master
      profile: dev

2.3添加application.yml配置,就加一个应用名,其他配置已经写在git上了

spring:
  application:
    name: springcloud-config-eureka-7001

2.4开启Eureka服务@EnableEurekaServer

三、新创建一个服务提供者springcloud-config-dept-8001,代码、依赖从之前的服务提供者复制过来的。

3.1添加pom.xml

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>2.2.5.RELEASE</version>
    </dependency>

3.2添加bootstrap.yml配置,连接config服务端 获取配置

spring:
  cloud:
    config:
      uri: http://localhost:3344
      name: config-dept
      label: master
      profile: dev

3.3添加application.yml配置,就加一个应用名,其他配置已经写在git上了

spring:
  application:
    name: springcloud-config-dept-8001

3.4其他代码都不用变

启动Config服务端3344提供配置,然后启动Eureka注册中心,注册中心连接了Config服务端,去获取配置,同理启动服务提供者,也是连接了Config服务端去获取配置,最终服务提供者成功注册到Eureka注册中心,服务也正常能被调用。

启动服务提供者的时候,竟然报错说找不到mybatis-config.xml的文件,明明是从其它模块的代码复制过来的,好在这是个老问题,以前开发遇到过,看看生成的target文件内有没有导入,一看就发现了问题,没有导入,clean一下就OK了。

个人学完后理解,使用Config后,所有配置文件写在git上,修改配置文件的时候不用到代码这边找配置文件然后修改,特别是微服务很多的情况,会很麻烦。运维如果要修改什么配置的话,也不会动到代码方面,直接到git上打开文件编辑,方便许多。还有如果是微服务的配置相同的话,那只用一个配置文件即可。

SpringCloud就学到这了,开始学习下一个内容。

猜你喜欢

转载自blog.csdn.net/adminguojieBin/article/details/123585664