美文网首页程序员
spring cloud zuul的使用

spring cloud zuul的使用

作者: 王传贺 | 来源:发表于2019-02-28 17:48 被阅读6次

在上篇文章中, 我们知道了微服务是怎么在注册中心注册服务,获取服务的,那小伙伴可能会有一个疑问. 各个模块之间的访问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

相关文章

网友评论

    本文标题:spring cloud zuul的使用

    本文链接:https://www.haomeiwen.com/subject/mrekuqtx.html