第六章 Zuul网关路由及源码分析笔记

本文介绍了如何使用Zuul作为API网关进行微服务路由,详细讲解了从基础配置、路由规则设定到过滤器的使用,包括安全访问的设置。在源码分析部分,探讨了ZuulServlet、ZuulFilter的执行流程和FilterProcessor的核心方法。
摘要由CSDN通过智能技术生成

前面所有的微服务都是通过Eureka找到的,但是在很多开发中为了规范微服务的使用,提供有一个处理控制器Zuul。Zuul其实是一个API网关,类似于设计模式里面的Facade门面模式,他的存在就像是整个微服务的门面,所有的外部客户端访问都需要经过它来进行调度与过滤。

代码Git地址:https://gitee.com/hankin_chj/springcloud-micro-service.git

一、zuul的基本使用

1、新建模块springcloud-micro-zuul-gateway

1.1、springcloud-micro-zuul-gateway的pom文件如下

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

1.2、zuul-gateway修改application.yml文件

server:
  port: 9501
eureka:
  client: # 客户端进行Eureka注册的配置
    service-url:
      defaultZone: http://admin:admin@eureka1:7001/eureka,http://admin:admin@eureka2:7002/eureka,http://admin:admin@eureka3:7003/eureka
    register-with-eureka: false
spring:
  application:
    name: springcloud-micro-zuul-gateway

1.3、zuul-gateway创建启动类

@SpringBootApplication
@EnableZuulProxy
public class ZuulApp {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApp.class,args);
    }
}

1.4、运行启动报错:

 

发现启动报错,其实这是因为zuul目前对springboot2.1.2及以上版本的支持并不好,这也是zuul最近一直被人诟病的地方,为了解决这个问题只好降低springboot的版本至2.0.7及以下。

1.5、降低系统的springboot版本为2.0.7.RELEASE

springcloud-micro-service修改父工程pom文件,降低springboot版本为2.0.7.RELEASE

<!-- 进行SpringCloud依赖包的导入处理 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-dependencies</artifactId>
  <version>Finchley.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>
<!-- SpringCloud离不开SpringBoot,所以必须要配置此依赖包 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <!--<version>2.1.3.RELEASE</version>-->
  <version>2.0.7.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

注意:

因为zuul的使用问题降低了springboot的版本,这个使用要注意将数据库的驱动名称也做相应的修改:

# 配置MySQL的驱动程序类,注意springboot降低版本以后不能使用com.mysql.cj.jdbc.Driver

driver-class-name: com.mysql.jdbc.Driver

重新启动ZuulApp:

正常访问用户服务:http://localhost:8090/user/get/1

使用zuul代理访问用户服务:http://localhost:9501/springcloud-micro-user/user/get/1

 

2、Zuul配置路由

前面以及简单的使用了zuul,但你会发现访问地址还必须知道程序的名称,如果不知道这个名称是无法访问的,但如果让用户知道了这名称,那么使用zuul就是去它的实际意义的,我们可以通过名称直接调用。既然是使用代理,那么代理的功能就是不能让用户看到真实的操作,屏蔽真实的调用地址,这个时候就需要自己增加zuul的路由规则配置了。

2.1、zuul-gateway修改application.yml配置文件,增加路由配置

# 使用zuul代理
zuul:
  routes:
    springcloud-micro-user: /user-proxy/**

这个时候就可以通过/users-proxy 来访问springcloud-micro-user服务

访问地址:http://localhost:9501/user-proxy/user/get/1,可以正常返回结果。

2.2、忽略掉用户服务的名称

但是还会发现,虽然现在以及开启了路由访问的支持,但依然通过应用程序的名称还是能访问

访问地址:http://localhost:9501/microcloud-provider-users/users/get/1

zuul-gateway修改application.yml文件,忽略掉用户服务的名称:

# 使用zuul代理
zuul:
  routes:
    springcloud-micro-user: /user-proxy/**
  ignored-services: springcloud-micro-user

做完后,就可以进行代理的安全使用,但真实情况下,一般会有很多微服务,如果完全按照上面的配置方式会非常的麻烦,所有最加到的做法是可以采用一个通配符“*”的模式来统一完成。

2.3、zuul-gateway修改application.yml文件

# 使用zuul代理
zuul:
  routes:
    springcloud-micro-user: /user-proxy/**
  #ignored-services: springcloud-micro-user
  ignored-services: "*"

重新启动访问:http://localhost:9501/user-proxy/user/get/1,正常返回数据。

访问:http://localhost:9501/springcloud-micro-user/user/get/1,则无法访问。

2.4、zuul中另外一种配置方式

除开上面这一种访问模式以外,在zuul中还有另外一种配置方式,修改application.yml文件:

zuul: # zuul的另外一只配置方式
  routes:
    user.path: /user-proxy/**
    user.serviceId: springcloud-micro-user
  ignored-services:
    "*"

其中在配置文件中出现的user其实是一个逻辑名称,这个名称主要作用是将path与serviceId绑定在一起。

2.5、zuul-gateway脱离eureka进行访问

zuul-gateway模块如果说不想通过eureka进行访问,对于zuul来说也是可以实现的,但是在真实的开发环境中,基本不会使用,yml配置如下所示:

# zuul-gateway脱离eureka进行访问
zuul:
  routes:
    user:
      path: /user-proxy/**
      serviceId: springcloud-micro-user
    user2:
      path: /user2-proxy/**
      url: http://localhost:8090/
  ignored-services:
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值