SpringCloud学习记录——5.网关

1.前言

经过上一篇博客的Hystrix学习后,接下来我们正式开始网关的学习,目前常用的网关组件有Zuul和Gateway,这里我们就重点来学习一下这两个组件的使用。

Zuul和Gateway区别

虽然在服务网关有了zuul,其本身还是基于servlet实现的,换言之还是同步阻塞方式的实现。就其本身来讲它的最根本弊端也是再此。而非阻塞带来的好处不言而喻,高效利用线程资源进而提高吞吐量,基于此Spring率先拿出针对于web的杀手鐗,对,就是webflux。而Gateway本身就是基于webflux基础之上实现的。毕竟spring推出的技术,当然要得以推广嘛。不过就国内的软件公司而言为了稳定而选择保守,因此就这项技术的广度来说我本身还是在观望中。

2.Zuul

ZUUL是Netflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,它主要用作反向代理、Filter扩展、动态加载、动态路由、压力测试、弹性扩展、审查监控、安全检查等。

  1. 像之前一样建立名为zuul-client的模块,同样记得在选择依赖时选择Spring Web、Eureka Discovery、Zuul,如图所示:
    在这里插入图片描述
  2. 修改配置文件application.yml,代码如下:
server:
  port: 18767
eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone: http://${eureka.instance.hostname}:18761/eureka/
spring:
  application:
    name: service-zuul
zuul:
  routes:
    service-ribbon:
      path: /ribbon/**
      serviceId: service-ribbon
    service-feign:
      path: /openfeign/**
      serviceId: service-openfeign

这里来简单讲解下参数:service-ribbonservice-feign这个是路由节点名词,可以随便起,但为了统一,建议和服务名称一致,path表示我们可以把服务名称替换为这个路径,最后serviceId必须和注册中心一致

  1. 修改启动类,使用注解@EnableZuulProxy开启Zuul路由支持。代码如下:
package com.springclouddemo.zuulclient;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class ZuulClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulClientApplication.class, args);
    }
}
  1. 按照顺序依次启动eureka-servereureka-clientribbon-clientopenfeign-clientzuul-client,访问注册中心页面,可以看到zuul模块已经启动,如图所示:
    在这里插入图片描述
  2. 分别访问http://localhost:18767/ribbon/hihttp://localhost:18767/openfeign/hi可以看到如下显示结果,说明zuul配置成功,如图所示:
    在这里插入图片描述
    在这里插入图片描述

3.GateWay

spring cloud gateway是基于netty运行的环境,在servlet容器环境或者把它构建为war包运行的话是不允许的,因此在项目当中没有必要添加spring-boot-starter-web。其是基于spring webflux技术。

  1. 像之前一样建立名为gatesway-client的模块,同样记得在选择依赖时选择Spring Web、Eureka Discovery、GateWay,如图所示:
    在这里插入图片描述
  2. 修改配置文件application.yml,Gateway提供了两种配置方式,一种是直接配置文件即可,另外一种是使用代码RouteLocator类来配置。这里演示比较方便的配置文件,代码如下:
server:
  port: 18768
eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone: http://${eureka.instance.hostname}:18761/eureka/
spring:
  application:
    name: service-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      - id: ribbon
        uri: lb://service-ribbon
        predicates:
        - Path= /ribbon/**
        filters:
        - StripPrefix=1
      - id: openfeign
        uri: lb://service-openfeign
        predicates:
        - Path= /openfeign/**
        filters:
        - StripPrefix=1

Eureka管理的服务,我们uri使用lb协议即可,其他需要使用对应的协议。
Predicates意思为断言,也就是我们/ribbon/**这样的路径会被转发到相应的
服务。
注意:Gateway默认转发是全路径的,设置StripPrefix=1表示从二级url路径转发,即http://localhost:port/activity/test将会转发到http://{activity}/test

  1. 修改启动类,代码如下:
package com.springclouddemo.gatewayclient;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayClientApplication.class, args);
    }

}
  1. 按照顺序依次启动eureka-servereureka-clientribbon-clientopenfeign-clientgateway-client,访问注册中心页面,可以看到gateway模块已经启动,如图所示:
    在这里插入图片描述
  2. 分别访问http://localhost:18768/ribbon/hihttp://localhost:18768/openfeign/hi可以看到如下显示结果,说明gateway配置成功,如图所示:
    在这里插入图片描述
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章