一、Zuul组件简介

1、基础概念

Zuul 网关主要提供动态路由,监控,弹性,安全管控等功能。在分布式的微服务系统中,系统被拆为了多个微服务模块,通过zuul网关对用户的请求进行路由,转发到具体的后微服务模块中。

2、Zuul的作用

1)按照不同策略,将请求转发到不同的服务上去;

2)聚合API接口,统一对外暴露,提高系统的安全性;

3)实现请求统一的过滤,以及服务的熔断降级;

3、案例结构

启动顺序如下:

# 注册中心

node05-eureka-7001

# 两个服务提供者

node05-provider-6001

node05-provider-6002

# 网关控制

node05-zuul-7002

启动成功后,注册中心展示如下:

二、Zuul使用详解

1、核心依赖

org.springframework.cloud

spring-cloud-starter-zuul

2、核心配置文件

server:

port: 7002

spring:

application:

name: cloud-node05-parent

eureka:

instance:

prefer-ip-address: true

client:

service-url:

defaultZone: http://registry01.com:7001/eureka/

zuul:

# 前缀,可以用来做版本控制

prefix: /v1

# 禁用默认路由,执行配置的路由

ignored-services: "*"

routes:

# 配置6001接口微服务

pro6001:

serviceId: node05-provider-6001

path: /api-6001/**

# 配置6002接口微服务

pro6002:

serviceId: node05-provider-6002

path: /api-6002/**

启动类注解:@EnableZuulProxy

3、统一服务降级

实现FallbackProvider接口,自定义响应提示。

@Component

public class FallBackConfig implements FallbackProvider {

private static final Logger LOGGER = LoggerFactory.getLogger(FallBackConfig.class) ;

@Override

public ClientHttpResponse fallbackResponse(Throwable cause) {

// 捕获超时异常,返回自定义信息

if (cause instanceof HystrixTimeoutException) {

return response(HttpStatus.GATEWAY_TIMEOUT);

} else {

return fallbackResponse();

}

}

private ClientHttpResponse response(final HttpStatus status) {

return new ClientHttpResponse() {

@Override

public HttpStatus getStatusCode() {

return status;

}

@Override

public int getRawStatusCode() {

return status.value();

}

@Override

public String getStatusText() {

return status.getReasonPhrase();

}

@Override

public void close() {

LOGGER.info("close");

}

@Override

public InputStream getBody() {

String message =

"{\n" +

"\"code\": 200,\n" +

"\"message\": \"微服务飞出了地球\"\n" +

"}";

return new ByteArrayInputStream(message.getBytes());

}

@Override

public HttpHeaders getHeaders() {

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON);

return headers;

}

};

}

@Override

public String getRoute() {

return "*";

}

@Override

public ClientHttpResponse fallbackResponse() {

return response(HttpStatus.INTERNAL_SERVER_ERROR);

}

}

4、统一过滤器

继承ZuulFilter类,自定义过滤动作。

@Component

public class FilterConfig extends ZuulFilter {

private static final Logger LOGGER = LoggerFactory.getLogger(FilterConfig.class) ;

@Override

public String filterType() {

return "pre";

}

@Override

public int filterOrder() {

return 0;

}

@Override

public boolean shouldFilter() {

return true;

}

@Override

public Object run() {

RequestContext requestContext = RequestContext.getCurrentContext() ;

try {

doBizProcess(requestContext);

} catch (Exception e){

LOGGER.info("异常:{}",e.getMessage());

}

return null;

}

public void doBizProcess (RequestContext requestContext) throws Exception {

HttpServletRequest request = requestContext.getRequest() ;

String reqUri = request.getRequestURI() ;

if (!reqUri.contains("getAuthorInfo")){

requestContext.setSendZuulResponse(false);

requestContext.setResponseStatusCode(401);

requestContext.getResponse().getWriter().print("Path Is Error...");

}

}

}

5、测试流程

1)测试网关配置

访问如下接口,响应正常,说明网关配置生效:

http://localhost:7002/v1/api-6001/getAuthorInfo/1

http://localhost:7002/v1/api-6002/getAuthorInfo/2

2)测试服务降级

关闭6001服务,再次访问接口,提示信息如下,说明服务降级策略生效:

{

"code": 200,

"message": "微服务飞出了地球"

}

3)测试过滤器

因为请求URI不匹配getAuthorInfo,所以被拦截,说明过滤器略生效:

http://localhost:7002/v1/api-6001/

响应提示:

Path Is Error...

三、源代码地址

GitHub·地址

https://github.com/cicadasmile/spring-cloud-base

GitEE·地址

https://gitee.com/cicadasmile/spring-cloud-base

zuul两大作用_SpringCloud微服务(05):Zuul组件,实现路由网关控制相关推荐

  1. zuul两大作用_springCloud学习- 路由网关(zuul)

    1.zuul简介 1.1.zuul是什么 zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用. Zuul 在云平台上提供动态路由,监控,弹性, ...

  2. 《深入理解 Spring Cloud 与微服务构建》第十章 路由网关 Spring Cloud Zuul

    <深入理解 Spring Cloud 与微服务构建>第十章 路由网关 Spring Cloud Zuul 文章目录 <深入理解 Spring Cloud 与微服务构建>第十章 ...

  3. 【微服务架构】SpringCloud之路由网关(zuul)

    什么是zuul zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用. Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Zu ...

  4. 微服务升级优点_SpringCloud微服务架构升级总结

    原标题:SpringCloud微服务架构升级总结 1.1 应用系统的架构历史 1.2 什么是微服务? 起源:微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇文章" ...

  5. 华为云“企业快成长大数据与微服务技术创新论坛”成功举办

    6月16日,由华为云.msup.厦门火炬大学堂.厦门市行业软件协会联合主办的"企业快成长大数据与微服务技术创新论坛"在厦门成功举办.本次活动汇聚了华为云.珍爱网等知名企业的CTO和 ...

  6. 【PPT及视频资料】360互联网技术训练营第十六期——大数据与微服务之路

    奇技指南 7月21号,在北京360公司总部举办了[360互联网技术训练营第16期--大数据与微服务之路]. 小编这就带大家回顾下大会精彩内容,并打包送上本次的PPT和视频! 面对复杂的业务逻辑和海量用 ...

  7. 闭包的两大作用:保存/保护

    闭包的概念 函数执行时形成的私有上下文EC(FN),正常情况下,代码执行完会出栈后释放;但是特殊情况下,如果当前私有上下文中的某个东西被上下文以外的事物占用了,则上下文不会出栈释  放, 从而形成不销 ...

  8. Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构

    Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留 ...

  9. 微服务为什么要用到 API 网关?

    本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志. 作者程小兰,API7.ai 技术工程师,Apache APISIX Contrib ...

最新文章

  1. 【转】语音、音频的思考
  2. 文巾解题 面试题 01.04. 回文排列
  3. 深度学习Deep learning From Image to Sequence
  4. 监管大屏系统_餐饮公示大屏广告位招商正式启动!
  5. Python 38 初识数据库
  6. 下载文件(弹出迅雷来下载)
  7. 大数据领域33个预测,开启未知的2016
  8. 搭建struts2框架
  9. JAVA1.6实现动态编译加载运行
  10. mvc源码解读(10)-ParameterDescriptor方法Action方法的参数描述对象
  11. 计算机网络 多个站点共享信道的方式图
  12. Mac在Anaconda中安装XGBoost
  13. 用正则表达式验证邮箱和手机号
  14. java 实现macd算法_macd 的java版本实现 包含测试用例
  15. Frodo and pillows CodeForces - 760B
  16. psc格式文件 的数据库导入问题
  17. 计算机cpu任务管理器,任务管理器里CPU使用率过高问题
  18. 简谈:java种关于BigDecimal的坑
  19. 《从Paxos到Zookeeper分布式一致性原理与实践》读书笔记
  20. C++系列(纯虚函数和抽象类)

热门文章

  1. 【PyTorch学习笔记】4:在Tensor上的索引和切片
  2. linux模拟器 cygwin源
  3. BERT的通俗理解 预训练模型 微调
  4. 使用最新版(2020)IntelliJ IDEA 创建Servlet项目
  5. LeetCode简单题之Fizz Buzz
  6. 硬核科普:到底啥是云原生?
  7. CPU三级缓存技术解析
  8. OpenCL框架与示例
  9. Non-Maximum Suppression,NMS非极大值抑制
  10. CUDA运行时 Runtime(二)