SpringCloud模拟微服务8-Zuul网关

10 篇文章 0 订阅
8 篇文章 0 订阅

SpringCloud模拟微服务8-Zuul网关

官网:https://github.com/Netflix/zuul

一.Zuul定义

Zuul是Netflix开源的微服务网关,它可以和Eureka,Ribbon,Hystrix等组件的配合使用。Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能。

  • 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
  • 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精准的生产视图。
  • 动态路由:动态的将请求路由到不同的后端集群。
  • 压力测试:逐渐增加指向集群的流量。以了解性能。
  • 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求。
  • 静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。
  • 多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB(Elastic Load Balancing)使用的多样化,以及让系统的边缘更贴近系统的使用者。

网关核心功能:过滤和路由

二.Zuul加入后的架构图


Zuul成为了统一入口。

三.项目操作

1.创建新module项目

2.引入依赖

<dependencies>
    <!--Zuul依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>
    <!-- eureka  -->
    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

3.application.yaml的配置(可以直接看第5点)

server:
  port: 10010
# 配路由的规则
spring:
  application:
    name: gateway
zuul:
  routes:
    hehe:                # 这个hehe代表路由的id
      path: /user-service/**     # 截断以这个为路径的请求
      url: http://127.0.0.1:8081   #将请求转发到此处

缺点服务请求写死了,万一服务改地址(127.0.0.1)改端口(8081)了呢?

4.上述写法还不正确,应该面向服务而不是url

应该这么写

server:
  port: 10010
# 配路由的规则
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
spring:
  application:
    name: gateway
zuul:
  routes:
    haha:                #这个hehe代表路由的id
      path: /user-service/**     #截断以这个为路径的请求
      serviceId: user-service   #之前编写的时候服务列表都叫user-service


简化写法:

server:
  port: 10010   #配路由的规则
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka  #注册到eureka服务中心
spring:
  application:
    name: gateway
zuul:
  routes:
    user-service: /user-service/**      #这个hehe代表路由的id(简化)

5.真实情况

其实zuul你配不配都可以执行,因为它默认的为每一个微服务创建这个路径映射

server:
  port: 10010   #配路由的规则
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka  #注册到eureka服务中心
spring:
  application:
    name: gateway

但是大都数情况下我们不用默认的,比如:

zuul:
    routes:
        user-service: /user-service/**   #这是默认的情况,我觉得太长了,就可以自己自定义
        
//并且在默认情况下:它所找到的所有微服务都会配置,但是如果有不想对外暴露的微服务就采取以下办法
zuul:
    routes:
        user-service: user/**   #自定义
ignored-service:
    - consumer-service          #忽略掉,使得该url不起作用

6.去除前缀(为了网页输入的ip地址请求再短一点)

zuul:
    routes:
        user-service:
            path: /user/**
            serviceId: user-service
            strip-prefix: false   #默认去除,这里设置为不去除,user/?会转发到真正的微服务
//原本:                  http://localhost:10010/user-service/user/1
//使用以上配置后,输入地址: http://localhost:10010/user/1

7.添加前缀

zuul:
    prefix: /api      #添加前缀
    routes:
        user-service: /user/**
//原来:      http://localhost:10010/user-service/user/1
//现在必须要: http://localhost:10010/api/user-service/user/1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值