热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

组件启动顺序_SpringCloud微服务:Zuul组件,实现路由网关控制

写在前面阅读本文前,你可能需要了解以下内容,如果熟悉的话,直接略过。SpringCloud微服务:Eureka组件之服务注册
写在前面

阅读本文前,你可能需要了解以下内容,如果熟悉的话,直接略过。

SpringCloud微服务:Eureka组件之服务注册与发现

SpringCloud微服务:Ribbon和Feign组件,实现服务调用的负载均衡

SpringCloud微服务:Hystrix组件,实现服务熔断

SpringCloud微服务:Turbine组件,实现微服务集群监控

一、Zuul组件简介

1、基础概念

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

2、Zuul的作用

1)按照不同策略,将请求转发到不同的服务上去;2)聚合API接口,统一对外暴露,提高系统的安全性;3)实现请求统一的过滤,以及服务的熔断降级;

3、案例结构

8697a7ea06040639b31d047cf78585a4.png

启动顺序如下:

# 注册中心node05-eureka-7001# 两个服务提供者node05-provider-6001node05-provider-6002# 网关控制node05-zuul-7002

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

467373f64d4ba8798533985a6b0471b9.png
二、Zuul使用详解

1、核心依赖

org.springframework.cloud spring-cloud-starter-zuul

2、核心配置文件

server: port: 7002spring: application: name: cloud-node05-parenteureka: 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接口,自定义响应提示。

@Componentpublic 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 = "{" + ""code": 200," + ""message": "微服务飞出了地球"" + "}"; 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类,自定义过滤动作。

@Componentpublic 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("异常:{}



推荐阅读
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 本文详细介绍了`android.os.Binder.getCallingPid()`方法的功能和应用场景,并提供了多个实际的代码示例。通过这些示例,开发者可以更好地理解如何在不同的开发场景中使用该方法。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 深入理解Java SE 8新特性:Lambda表达式与函数式编程
    本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ... [详细]
  • 本文介绍了一个使用Spring框架和Quartz调度器实现每周定时调用Web服务获取数据的小项目。通过详细配置Spring XML文件,展示了如何设置定时任务以及解决可能遇到的自动注入问题。 ... [详细]
  • 根据官方定义,RxJava是一种用于异步编程和可观察数据流的API。其核心特性在于流式处理能力和丰富的操作符支持。 ... [详细]
  • 在Effective Java第三版中,建议在方法返回类型中优先考虑使用Collection而非Stream,以提高代码的灵活性和兼容性。 ... [详细]
  • 本文详细介绍了Java库com.powsybl.afs.storage中的NodeGenericMetadata.getBooleans()方法,并提供了多个实际应用的代码示例。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • MOSS2007 中型服务场配置指南:网络负载均衡集群设置
    本文详细介绍了如何在MOSS2007环境中配置网络负载均衡集群,包括安装和配置网络负载均衡功能的具体步骤。通过本文,读者可以了解如何在多台Web服务器上安装并配置网络负载均衡,以实现高效的服务分发。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
author-avatar
天凉好个秋骄阳_213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有