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 xxxxxx@qq.com
4、生成公钥,并放到gitee上
$ ssh-keygen -t rsa -C "905022619@qq.com"
5、输入命令 拉取仓库代码
git clone git@gitee.com:guo-jiebin/springcloud-config.git
更新仓库步骤:
1、git add .
2、$ git status
查看文件状态
3、$ git commit -m "first commit"
添加信息 不能少这个步骤
4、$ git push origin master
origin选择当前用户 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就学到这了,开始学习下一个内容。