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

zuul网关_一、Zuul网关

网关在整个微服务的系统中角色是非常重要的。很多公司网关都是自己写的。网关的作用非常多,比如路由、限流、降级、安全控制、服务的聚合。目前有哪些技术可以用来做网关

网关在整个微服务的系统中角色是非常重要的。很多公司网关都是自己写的。网关的作用非常多,比如路由、限流、降级、安全控制、服务的聚合。

目前有哪些技术可以用来做网关:

- nginx upstream app{ip,ip,ip}

- spring cloud gateway

- netflix zuul

- 自定义网关

1. 使用网络做接口路由

步骤一: 引入依赖

org.springframework.cloudspring-cloud-starter-netflix-zuul

步骤二:编写配置文件

556459f07badb17814670dfc14f0d8ce.png

步骤三:打上注解

@EnableDiscoveryClient@EnableZuulProxy
@SpringBootApplicationpublic class QfSpringCloudNetflixZuulApplication {public static void main(String[] args) {SpringApplication.run(QfSpringCloudNetflixZuulApplication.class, args);}}

2. 统一前缀的设置

strip-prefix: true 时,在接口中使用的路径,是接口真实存在的路径。

1)全局路径的设置

2f95154ac216b09b893be5606381fa54.png

1)局部路径的设置

20610d6c07f6bd6b4175c1a8adb5d380.png

3. 保护敏感路径

/**/admin/**

在zuul的配置文件中加入这一段:

ignored-patterns: /**/admin/**

那么接口中只要带有/admin/的,就都不能访问

4. 过滤掉敏感头

zuul:routes:api-a:path: /api/a/**serviceId: hello-spring-cloud-web-admin-ribbon# stripPrefix: false
# 是可以携带COOKIE,如果不加的话,那COOKIE携带不过来
sensitiveHeaders:

5. 设置服务的回调方法实现服务降级

通过创建一个FallbackProvider的实现类,在类中指明错误回调内容

@Componentpublic class MyGatewayFallback implements FallbackProvider {/*设置要对哪些服务进行错误回调,return 具体的服务名称,也可以return "*" 获得return null ==>对所有服务进行错误回调*/
@Overridepublic String getRoute() {return "hello-spring-cloud-web-admin-ribbon";}/*具体的回调内容*/
@Overridepublic ClientHttpResponse fallbackResponse(String route, Throwable cause) {return new ClientHttpResponse() {/*返回一个状态码*/
@Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.OK;}@Overridepublic int getRawStatusCode() throws IOException {return HttpStatus.OK.value();}@Overridepublic String getStatusText() throws IOException {return HttpStatus.OK.getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {ObjectMapper objectMapper = new ObjectMapper();Map map = new HashMap();map.put("status",200);map.put("message","无法连接,请检查您的网络");return new ByteArrayInputStream(objectMapper.writeValueAsBytes(map));}@Overridepublic HttpHeaders getHeaders() {HttpHeaders headers = new HttpHeaders();// 和 getBody 中的内容编码一致
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);return headers;}};}
}

6. 网关过滤器的用法

1)过滤器的类型

2)过滤器该怎么样实现过滤和放行

@Componentpublic class MyZuulFilter extends ZuulFilter {/*配置过滤器类型,根据生命周期的不同,有四种类型1.pre: 路由之前2.routing: 路由之时3.post: 路由之后4.error: 在上面三者执行过程中出现了异常就会调用该error过滤器*/
@Overridepublic String filterType() {return "pre";}//相同过滤器类型之间确定执行的顺序,0就表示第一个执行。
@Overridepublic int filterOrder() {return 0;}/*配置是否需要过滤:true 需要 false 不需要*/
@Overridepublic boolean shouldFilter() {return true;}/*** 过滤器要执行过滤的具体的内容* 如果这一次请求,没有携带COOKIE,那么就不进行路由。* @return
* @throws ZuulException*/
@Overridepublic Object run() throws ZuulException {//得到request的当前的上下文对象
RequestContext ctx = RequestContext.getCurrentContext();//得到request对象
HttpServletRequest request = ctx.getRequest();COOKIE[] COOKIEs = request.getCOOKIEs();if(COOKIEs==null||COOKIEs.length==0){//不进行路由
ctx.setSendZuulResponse(false);//设置返回状态码
ctx.setResponseStatusCode(401);//设置返回体
ctx.setResponseBody("no permission");//设置自定义键值对
ctx.set("isSuccess",false);}else{//进行路由
ctx.setSendZuulResponse(true);ctx.setResponseStatusCode(200);ctx.set("isSuccess",true);}return null;}
}

过滤器的执行流程

260b1df6c2fd81f9694b871b580e10c6.png



推荐阅读
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
author-avatar
Tow-face信信
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有