hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

spring cloud 2.x版本 Zuul路由网关教程

2019-11-18杂谈搜奇网26°c
A+ A-

媒介

本文采纳Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3

本文基于前两篇文章eureka-server、eureka-client、eureka-ribbon和eureka-feign的完成。
参考

  • eureka-server
  • eureka-client
  • eureka-ribbon
  • eureka-feign

观点

Zuul的主要功用是路由转发和过滤器。路由功用是微效劳的一部分,比方将请求/api/goods转发到商品效劳上、/api/order转发到定单效劳上等。

Zull默许和Ribbon连系完成了负载平衡功用。

建立Zuul工程

1.1 建立sping boot工程:eureka-zuul

1.2 增添pom.xml相干依靠

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

1.3 application增添设置信息

spring:
  application:
    name: eureka-zuul
server:
  port: 8400

eureka:
  instance:
    hostname: localhost
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 10
  client:
    service-url:
      defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/

zuul:
  routes:
    eureka-ribbon: #对应效劳称号,能够自定义(最好保持一致)
      path: /ribbon/*
      serviceId: eureka-ribbon #对应效劳称号
    eureka-feign:
      path: /eureka-feign/*
      serviceId: eureka-feign #对应效劳称号

1.4 启动类EurekaZuulApplication增添注解

package spring.cloud.demo.eurekazuul;

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

@EnableZuulProxy
@SpringBootApplication
public class EurekaZuulApplication {

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

}

@EnableZuulProxy:开启Zuul网关注解

1.5 启动eureka-zuul效劳

翻开浏览器,离别输入http://localhost:8400/ribbon/sayHello,http://localhost:8400/eureka-feign/feign/sayHello,显现效果离别以下:

能够看到Zuul根据路由转发的设置划定规矩,把/ribbon/的请求转发到eureka-ribbon效劳上,把/eureka-feign/的请求转发到eureka-feign的效劳上。

至此,一个简朴基于Zuul路由网关就搭建完成了。

彩蛋

增添自定义过滤器

Zuul过滤器有四种范例离别是

  • pre 路由前
  • route 路由时
  • post 路由终了
  • error 发作错误时

建立自定义过滤器filter

package spring.cloud.demo.eurekazuul.fillter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 简朴filter过滤器
 * @auther: maomao
 * @DateT: 2019-09-17
 */
public class CommonFilter extends ZuulFilter {

    /**
     * 在请求被路由之前挪用
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * filter实行递次,经由过程数字指定 ,优先级为0,数字越大,优先级越低
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 是不是实行该过滤器,此处为true,申明须要过滤
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();

        //猎取请求参数
        String token = request.getParameter("token");

        //校验token是不是能够经由过程
        if (StringUtils.isNotBlank(token) && token.equals("maomao")) {
            requestContext.setSendZuulResponse(true);
            requestContext.setResponseStatusCode(200);
            requestContext.set("code", 1);
        } else {
            requestContext.setSendZuulResponse(false);
            requestContext.setResponseStatusCode(401);
            HttpServletResponse response = requestContext.getResponse();
            response.setHeader("content-type", "text/html;charset=utf-8");
            requestContext.setResponseBody("网关认证失利,住手路由");
            requestContext.set("code", 0);
        }
        return null;
    }
}

将过滤器到场Bean,增添Config类

package spring.cloud.demo.eurekazuul.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import spring.cloud.demo.eurekazuul.fillter.CommonFilter;

/**
 * @auther: maomao
 * @DateT: 2019-09-17
 */
@Configuration
public class ZuulFilterConfig {

    @Bean
    public CommonFilter commonFilter() {
        return new CommonFilter();
    }
}

启动工程

在浏览器离别输入http://localhost:8400/ribbon/sayHello,http://localhost:8400/eureka-feign/feign/sayHello,显现效果以下:

显现效果证实,过滤器已见效。由于过滤CommonFilter中请求输入参入带token=maomao,所以请求被阻拦,Zuul住手转发。

在浏览器中URL中增添token参数,显现以下:

显现效果证实,在token准确的情况下,Zuul转发胜利。

至此,自定义的过滤器就演示完成。

总结

本文要完成了简朴的Zuul路由转发运用。

代码地点

gitHub地点

《Srping Cloud 2.X小白教程》目次
  • spring cloud 2.x版本 Eureka Server效劳注册中间教程
  • spring cloud 2.x版本 Eureka Client效劳提供者教程
  • spring cloud 2.x版本 Ribbon效劳发明教程(内含集成Hystrix熔断机制)
  • spring cloud 2.x版本 Feign效劳发明教程(内含集成Hystrix熔断机制)
  • spring cloud 2.x版本 Zuul路由网关教程
  • spring cloud 2.x版本 config分布式设置中间教程
  • spring cloud 2.x版本 Hystrix Dashboard断路器教程
  • spring cloud 2.x版本 Gateway路由网关教程
  • spring cloud 2.x版本 Gateway自定义过滤器教程
  • spring cloud 2.x版本 Gateway熔断、限流教程
  • spring cloud 2.x版本 Gateway动态路由教程

  • 写作不容易,转载请说明出处,喜好的小伙伴能够关注民众号检察更多喜好的文章。
  • 联系方式:4272231@163.com
  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
spring cloud 2.x版本 Zuul路由网关教程

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282376.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>