美文网首页Spring cloudSpring Cloud
spring cloud微服务架构(六):API 网关Zuul的

spring cloud微服务架构(六):API 网关Zuul的

作者: mxjsxz | 来源:发表于2018-08-03 16:53 被阅读28次

    1 什么是网关

    网关是一种可提供路由资源统一管理的工具, 将"1对N"问题 转换成了"1对1”问题。通过服务路由的功能,可以在对外提供服务时,只暴露 网关中配置的调用地址,而调用方就不需要了解后端具体的微服务主机。

    有点Facade设计模式的感觉

    image.png

    服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用。

    Zuul通过与Eureka的整合,将自身注册到服务中心,从而可以获到所有其他微服务实例信息。

    作用:

    1. 服务路由
    2. 过滤器
    3. 负载均衡
    4. 权限控制
    5. ...

    2 本文结构

    下面进行实验,使用到的组件包括:Eureka、Feign、Zuul,包括以下四个项目:

    1. spring-zuul-server:Eureka服务器
    2. spring-zuul-member : 服务提供者,提供查询会员的信息服务
    3. spring-zuul-sale : 服务调用者,调用会员信息
    4. spring-zuul-gateway : Zuul网关

    关于前三个项目本文不再多少,前面的文章中已解释

    3 Zuul的基本使用

    创建一个spring boot项目,pom文件中加入Zuul依赖和httpclient依赖,因为Zuul的底层是通过httpclient实现的

    <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.2</version>
            </dependency>
        </dependencies>
    

    添加启动类,增加注解@EnableEurekaClient标识该项目也为Eureka服务,增加注解@EnableZuulProxy开启网关代理功能

    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy
    public class GatewayApp {
    
        public static void main(String[] args) {
            new SpringApplicationBuilder(GatewayApp.class).
            web(true).run(args);
        }
    
    }
    

    增加yml配置文件,先配置该项目使用端口,Eureka服务器地址,服务名称。然后配置Zuul路由信息,http://localhost:9000/sale/...的请求都会指向http://localhost:8081/...

    server:
      port: 9000
    spring:
      application:
        name: spring-zuul-gateway
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/
    zuul:
      routes:
        sale:
          path: /sale/**
          serviceId: spring-zuul-sale
    

    4 Zuul路由断点查看

    可以通过向网关项目中引入Spring boot Actuator来查看网关中代理的所有信息,具体做法:

    1. pom文件中引入spring-boot-starter-actuator依赖
    2. 配置文件中增加management.security.enabled = false,关闭安全认证
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>1.5.3.RELEASE</version>
    </dependency>
    
    management:
      security:
        enabled: false
    

    然后访问:http://localhost:9000/routes,则会出现以下信息:

    {
    "/sale/**":"spring-zuul-sale",
    "/spring-zuul-member/**":"spring-zuul-member",
    "/spring-zuul-sale/**":"spring-zuul-sale"
    }
    

    参考:

    1. https://www.cnblogs.com/yjmyzz/p/spring-cloud-zuul-demo.html
    2. spring cloud入门指南
    3. https://github.com/Netflix/zuul
    4. http://www.ityouknow.com/springcloud/2018/01/20/spring-cloud-zuul.html

    相关文章

      网友评论

        本文标题:spring cloud微服务架构(六):API 网关Zuul的

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