spring cloud zuul的使用
在上篇文章中, 我们知道了微服务是怎样在注册中心注册服务,获取服务的,那小伙伴可能会有一个疑问. 各个板块之间的访问ip,端口都不相同,那前台调用接口岂不是很麻烦? 所以就使用到了spring cloud zuul路由功能
一 : 定义 :
????????Zuul 是?Netflix?开源的微服务网关,Spring Cloud 对 Zuul 进行了整合和加强。在 SpringCloud 体系中,Zuul 担任着网关的角色,对发送到服务端的请求进行少量预解决,比方安全验证、动态路由、负载分配等 .
????????Zuul 的核心是FIlters
二 : 作用 😕
????????spring cloud eureka管理注册了众多微服务, 这些微服务是各自独立的板块,访问路径均不相同,那我们就需要考虑前台外部怎样去访问各式各样的微服务,后台服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当增加API网关后,在第三方调用端和服务提供方之间就创立了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后端服务端。
三 : 本项目中的使用 😕
? ? ? ? ① : 新建一个zuul-service 的子板块管理
????????注解说明 :
????????????????@EnableDiscoveryClient : 我们也把zuul 注册到eureka上面 ,加这个注解是让eureka可以扫描到这个微服务
????????????????@EnableZuulProxy : ,当Zuul与Eureka、Ribbon等组件配合使用时,我们用@EnableZuulProxy,?核心是一个过滤器,来对url进行路由控制
ZuulServerApplication启动类
? ? ? ? ② : 配置文件application.yml 😕
spring:?
? application:?
? ? name: zuul-server? ? — 服务名称
? http:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? — http 设置
? ? multipart:
? ? ? max-file-size: 10MB #单个文件最大限制
? ? ? max-request-size: 100MB #单次请求最大限制
eureka:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? client:?
? ? service-url:?
? ? ? ? ? defaultZone: http://localhost:8761/eureka/? ? ? ? –? 默认地址
server:?
? port: 8080? ? ? ? ? ? ? ? ? ? ? ? ? ? –? 这个路由微服务端口
zuul:
? ignoredServices: ‘*’? ? ? ? ? ? ? — 表示我们忽略所有默认匹配的path,只能路由到我们手动配置的路径
? add-host-header: true? ? ? ? ? — 见下方解释
? retryable: true? ? ? ? ? ? ? ? ? ? ? ? — 开启zuul的请求重试策略 介绍见下方
#? host:
#? ? connect-timeout-millis: 2000
#? ? socket-timeout-millis: 10000
? routes:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? — 路由的路径配置
? ? ##系统服务(平台管理)
? ? system:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? — 服务名
? ? ? path: /sys/**? ? ? ? ? ? ? ? ? ? ? ? — 路径规则
? ? ? sensitiveHeaders:? ? ? ? ? ? ? — 过滤用户端附带的headers
? ? ? stripPrefix: true? ? ? ? ? ? ? ? ? — 这里的stripPrefix默认为true,也就是所有/demo/xxxx的请求转发? ? 给http://demo.com.cn/xxxx?,去除掉demo前缀
? ? ? serviceId: system-service? ? — 服务id 对应微服务yml中spring.application.name=system-service
对配置文件的补充 😕
????????重定向问题的起因和处理 😕
????????????????? zuul.add-host-header=true :
重定向问题的起因和处理
?retryable: true :
我们一般部署服务的时候,都会部署一个网关服务,内部所有的其余微服务的调用,都将通过网关路由过去,不对外直接暴露,对外只暴露网关服务。而且一般内部服务会部署多个实例,zuul集成了ribbon,会自动负载均衡的方式去调用内部服务。
当内部服务滚动重启的时候,通过网关的一个请求恰好路由到重启的那个实例的话,由于默认没有开启zuul的请求重试策略,该请求将会报错,其实理想的方式可以通过重试路由到另外一个活动的服务实例上去。
要开启zuul网关请求重试,首先需要增加spring-retry依赖:
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.retry</groupId>
? ? ? ? ? ? <artifactId>spring-retry</artifactId>
? ? ? ? </dependency>
而后配置:
zuul.retryable=true
这样,所有路由都将会进行重试。(此属性默认是false,所以不会重试)
通过路由配置我们实现了 :
http://ZUUL_HOST:ZUUL_PORT/微服务在Eureka上的serviceId/**?
例如 :
parking-base获取token路径
ip:9010/v1/security/logon
路由给前台的路径 :
ip:8080/base/v1/security/logon
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » spring cloud zuul的使用