zoukankan      html  css  js  c++  java
  • Zuul 网关

    一、什么是Zuul

    服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外提供REST API .除了具备服务路由、负载均衡功能之外, 它还具备权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

    Zuul加入后的架构

     不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuul这个网关,然后再由网关来实现 鉴权、动态路由等等操作。Zuul就是我们服务的统一入口

    二、Zuul 快速入门

    1、添加依赖

    2、编写启动类

    通过 @EnableZuulProxy 注解开启Zuul的功能

    @SpringBootApplication
    @EnableZuulProxy // 开启Zuul的网关功能
    public class ZuulDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ZuulDemoApplication.class, args);
        }
    }

    3、编写配置

    server:
      port: 10010 #服务端口
    spring: 
      application:  
        name: api-gateway #指定服务名 

    4、编写路由规则

    我们需要用Zuul 来代理User-Service 服务

    映射规则

    zuul:
      routes:
        user-service: # 这里是路由id,随意写
          path: /user-service/** # 这里是映射路径
          url: http://127.0.0.1:8081 # 映射路径对应的实际url地址

    我们将 /user-service/**开头的请求,代理到http://127.0.0.1:8081

    5、面向服务的路由(改进)

    在刚才的路有规则中,我们吧路径对应的服务地址写死了! 如果一个服务有多个实例,这样

    做显然就是不合理的。

    我们应该根据服务的名称,去Eureka注册中心 查询该服务对应的所有实例列表,然后进行动态路由

    1)添加Eureka 客户端依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    2)开启客户端的发现功能

    @SpringBootApplication
    @EnableZuulProxy // 开启Zuul的网关功能
    @EnableDiscoveryClient
    public class ZuulDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ZuulDemoApplication.class, args);
        }
    }

    3)添加Eureka 配置,获取服务信息

    eureka:
      client:
        registry-fetch-interval-seconds: 5 # 获取服务列表的周期:5s
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka
      instance:
        prefer-ip-address: true
        ip-address: 127.0.0.1

    4)修改映射配置,通过服务名称获取

    zuul:
      routes:
        user-service: # 这里是路由id,随意写
          path: /user-service/** # 这里是映射路径
          serviceId: user-service # 指定服务名称

    5)测试

    6)补充:简化的路由配置

    而大多数情况下,我们的<route>路由名称往往和 服务名会写成一样的。因此Zuul就提供了一种简化的配置语法:zuul.routes.<serviceId>=<path>

    zuul:  
      routes:  
         user-service: /user-service/** # 这里是映射路径

    7)指定前缀

    zuul:
      prefix: /api # 添加路由前缀
      routes:
          user-service: # 这里是路由id,随意写
            path: /user-service/** # 这里是映射路径
            service-id: user-service # 指定服务名称

    我们通过zuul.prefix=/api来指定了路由的前缀,这样在发起请求时,路径就要以/api开头。

    路径/api/user-service/user/1将会被代理到/user-service/user/1

  • 相关阅读:
    (II)第一节:IOC 和 DI
    (I)第二节:开发环境
    (I)第一节:Spring 框架
    Spring【目录】
    MyBatisPlus 之 Oracle 数据库主键
    MyBatisPlus 之 公共字段自动填充
    MyBatisPlus 之 全局SQL注入器应用
    MyBatisPlus 之 自定义全局操作
    MyBatisPlus 之 代码生成器
    彻底理解Netty
  • 原文地址:https://www.cnblogs.com/houchen/p/12063985.html
Copyright © 2011-2022 走看看