spring cloud 2.x版本 Zuul路由网关教程
前言
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3
本文基于前两篇文章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路由转发应用。
代码地址
《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
spring cloud 2.x版本 Zuul路由网关教程的更多相关文章
- spring cloud 2.x版本 Gateway路由网关教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- spring cloud 2.x版本 Ribbon服务发现教程(内含集成Hystrix熔断机制)
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 前言 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...
- spring cloud 2.x版本 Eureka Client服务提供者教程
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 1 创建eureka client 1.1 新建Srping boot工程:eureka-c ...
- spring cloud 2.x版本 Feign服务发现教程(内含集成Hystrix熔断机制)
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...
- spring cloud 2.x版本 Hystrix Dashboard断路器教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- spring cloud 2.x版本 Config配置中心教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前面的文章eureka-server的实现. 参考 eureka-server ...
- spring cloud 2.x版本 Gateway自定义过滤器教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- Spring Cloud 系列之 Netflix Zuul 服务网关
什么是 Zuul Zuul 是从设备和网站到应用程序后端的所有请求的前门.作为边缘服务应用程序,Zuul 旨在实现动态路由,监视,弹性和安全性.Zuul 包含了对请求的路由和过滤两个最主要的功能. Z ...
- Spring Cloud (4)zool 路由网关
一:作用: 1.1 转发 1.2 过滤 二.pom 三.启动类 ------------------------------------------------------------------ ...
随机推荐
- 函数的return和参数
1.函数 将一些代码进行封装 def 函数名 括号 冒号:#创建 函数体(代码块) 函数名 + 小括号 #调用 1.1函数的返回值 return return 不写返回的是None,return写了不 ...
- Github配合Jenkins,实现vue等前端项目的自动构建与发布
本篇文章前端项目以vue为例(其实前端工程化项目的操作方法都相同),部署在Linux系统上(centos). 之前做前端项目的部署,一直都是手动运行打包命令,打包完.再使用FTP.Xshell等这类的 ...
- 年薪500K工程师告诉你,python都能用来做什么?
一提到python,大家脑袋中都会想到「数据分析」.「爬虫」.「人工智能」这些词. 其实python并没有像如上所说的这样「专业」.「高深」的应用,对于初学者来说更是可以从一些超简单又有趣的小项目开始 ...
- springboot项目目录结构
idea新建springboot项目 按默认下一步至完成,默认目录结构如下 pom.xml文件内容如下 <?xml version="1.0" encoding=" ...
- 最简单的ArcGIS Engine应用程序(上)
名词: IWorkspaceFactory 工作空间工厂 ShapeFileWorksapceFactory 矢量文件工作空间工厂 IWorkspce 工作空间 IFeatrueWorkspace 要 ...
- django2.0+反向查询抛异常处理
一.错误信息 AttributeError: 'RelatedManager' object has no attribute 'lrc' #其中RelatedManager为关键字 二.反向查询的字 ...
- MySQL make_set()的用法
MAKE_SET(bits,str1,str2,…)返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串.str1对应于位0,str2到第1位,依此类推.在s ...
- PHP compact
1.函数的作用:将变量转成数组 2.函数的参数: @params string $varname1 @params string $varname2 ... @params array $varnam ...
- CSS Grid 网格布局教程
一.概述 网格布局(Grid)是最强大的 CSS 布局方案. 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局.以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了. 上 ...
- luogu P3936 Coloring
[返回模拟退火略解] 题目描述 在一个 n×mn\times mn×m 的矩阵中,每个点都染了一种颜色(只能是 [1,c][1,c][1,c] 中的一种),求一种方案,使得相邻异色点对数最小. Sol ...