Zuul

【少走弯路】 之 使用SpringCloud时网关zuul报504异常

蓝咒 提交于 2020-03-23 16:04:30
3 月,跳不动了?>>> 问题背景 还是上一篇说的大型商城项目,其中有短信验证功能点击发送验证码 问题描述 前台正常,后台zuul显示504异常,异常信息如下 com.netflix.zuul.exception.ZuulException: atorg.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter.findZuulException(SendErrorFilter.java:114) ~[spring-cloud-netflix-zuul-2.1.0.RELEASE.jar:2.1.0.RELEASE] 截图如下 问题导致 504错误代表网关超时,是指服务器作为网关或代理, 没有及时从上游服务器接收到请求正常情况下, 是由于被请求服务器发送超时引起。 问题解决 我们只需要在yml文件添加指定配置,即可解决 原yml文件 #端口号 server: port: 10010 #服务名 spring: application: name: cgzuul servlet: multipart: max-file-size: 2MB #上传文件的大小 #将网关服务添加到注册中心 eureka: client: fetch-registry: true register-with-eureka: true

SpringCloud -- zuul

a 夏天 提交于 2020-03-16 11:55:30
什么是API网关 在微服务架构中,通常会有多个服务提供者。设想一个电商系统,可能会有商品、订单、支付、用户等多个类型的服务,而每个类型的服务数量也会随着整个系统体量的增大也会随之增长和变更。作为UI端,在展示页面时可能需要从多个微服务中聚合数据,而且服务的划分位置结构可能会有所改变。网关就可以对外暴露聚合API,屏蔽内部微服务的微小变动,保持整个系统的稳定性。当然这只是网关众多功能中的一部分,它还可以做负载均衡,统一鉴权,协议转换,监控监测等一系列功能。 什么是Zuul Zuul是Spring Cloud全家桶中的微服务API网关。 所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能: 认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。 性能监测 在服务边界追踪并统计数据,提供精确的生产视图。 动态路由 根据需要将请求动态路由到后端集群。 压力测试 逐渐增加对集群的流量以了解其性能。 负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。 静态资源处理 直接在边界返回某些响应 在请求路由之前被调用的pre Filter 构建发送给微服务的请求 routing filters 在请求路之后被调用的 post filter

服务限流算法的几种实现

孤街浪徒 提交于 2020-03-15 22:01:57
一、场景描述 由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统。 面对大流量时,如何进行流量控制? 服务接口的流量控制策略:分流、降级、限流等。 本文讨论限流策略,虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。 实际场景中常用的限流策略: Nginx前端限流 按照一定的规则如帐号、IP、系统调用逻辑等在Nginx层面做限流 业务应用系统限流 1、客户端限流 2、服务端限流 数据库限流 红线区,力保数据库 按照服务的调用方,可以分为以下几种类型服务 1、与用户打交道的服务 比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮: 用户增长过快 因为某个热点事件(微博热搜) 竞争对象爬虫 恶意的刷单 这些情况都是无法预知的,不知道什么时候会有10倍甚至20倍的流量打进来,如果真碰上这种情况,扩容是根本来不及的 2、对内的RPC服务 一个服务A的接口可能被B C D E多个服务进行调用,在B服务发生突发流量时,直接把A服务给调用挂了,导致A服务对C D E 也无法提供服务。 这种情况时有发生,解决方案有两种: 1、每个调用方采用线程池进行资源隔离 2、使用限流手段对每个调用方进行限流 二、常用的限流算法 常见的限流算法有:计数器、令牌桶、漏桶。 1、计数器算法 采用计数器实现限流有点简单粗暴

我的Spring Cloud(四):RestTemplate的使用

冷暖自知 提交于 2020-03-13 10:57:09
上一篇我们已经学会了如何创建一个服务提供者,那么这一篇我们来创建一个服务消费者,实现思路是先通过Spring boot搭建一个微服务应用,再通过Eureka Client把它注册到注册中心Eureka Server,成为一个服务消费者。那么服务消费者如何调用服务提供者的接口呢,那么我们首先要来介绍一个组件RestTemplate的使用。 一、什么是RestTemplate RestTemplate 是 Spring 框架提供的基于 REST 的服务组件,底层是对 HTTP 请求及响应进⾏了封装, 提供了很多访问 RETS 服务的⽅法,可以简化代码开发。 二、如何使用RestTemplate 1.创建一个maven工程作为子服务 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.0.2.RELEASE</version> </dependency> 2.创建application.yml,代码如下 server: port: 8080 spring: application: name: consumer eureka: client: service-url:

RuoYi-plus:关于服务网关Zuul和Gateway的区别和联系

六眼飞鱼酱① 提交于 2020-03-11 10:58:47
RuoYi-plus3.0已经升级,v3.0版本中选择了Gateway作为服务网关。选择之前作者也在常用的网关服务Zuul和Gateway之间做徘徊,经过翻阅和搜集一些资料,最终选择了Gateway,那么让我们看看两者之间的区别和联系吧。 本文中的zuul,指的是zuul1.x,springcloud暂没有整合zuul2.x的计划,gateway是springcloud重点扶持的子项目,固仅在zuul1.x和gateway做比较。 Spring Cloud Gateway 基本介绍:Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。 性能介绍:WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring webflux 有一个全新的非堵塞的函数式 Reactive Web

zuul的转发路径问题

邮差的信 提交于 2020-03-10 15:09:24
直接说问题,在项目中做了转发配置,zuul一直报找不到服务方,开始没想这么多,以为是配置的问题。 比如A服务,正常的访问路径是 core/test01 就可以访问,在zuul中做了路由转发,配置为 zuul.routes.aa. path = /cc/** zuul.routes.aa. service-id = aa 这个时候按照道理应该是 127.0.0.1:zuul服务的端口/cc/core/test01 这样访问 可项目一直报找不到服务,一去查服务,这才发现没有 aa 这个服务,原因是因为 aa 项目是Eureka的服务端,配置了 # 中心集群时候必须为 true; 因为集群时,其他 Eureka 需要从此 Eureka 中的节点上获取数据 eureka.client.register-with-eureka = false #Erueka 是为注册中心,不需要检索服务信息 ;( 表示是否从 Eureka Server 获取注册信息,默认为 true 。 如果这是 # 一个单点的 Eureka Server ,不需要同步其他节点的数据,可以设为 false 。 eureka.client.fetch-registry = false 也就是说,Eureka没有去注册服务,当然找不到了。 来源: oschina 链接: https://my.oschina.net

springcloud服务注册与发现(二)

ε祈祈猫儿з 提交于 2020-03-10 09:22:51
Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。 服务注册中心 :eureka-server 新建一个springboot项目:eureka-server,其pom.xml配置如下 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud<

springcloud 微服务的 Zuul 配置

南笙酒味 提交于 2020-03-09 13:56:22
1、路由配置 a、单例serverId映射 zuul: routes: client-a: path: /client/** serviceId: client-a 意思是,以/client/**为端点路径的服务都映射到client-a,这种配置还可以简写成下面的格式,二者效果完全一致: 官网 www.1b23.com zuul: routes: client-a: /client/** 还有一种更粗暴的方式,就是映射的serverId都不用写,如下: zuul: routes: client-a: 这种配置,zuul会为client-a添加一个默认的映射规则,即:/client/**,相当于上面的第一种配置方式。 b、单例URL映射 这种配置意思就是,网关路由到具体的服务地址,即:将serverId替换成url,如下: zuul: routes: client-a: path: /client/** url: http://localhost:7070 #client-a的地址 c、多实例路由 默认情况下zuul会使用eureka中集成的负载均衡功能,如果要使用ribbon的负载均衡,就需要指定serverId,这个操作一定要禁用掉ribbon使用eureka,具体操作如下: zuul: routes: ribbon-route: path: /ribbon/**

SpringCloud网关组件zuul

风流意气都作罢 提交于 2020-03-09 00:56:50
1.引入如下依赖 <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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> 2.启动类添加如下注解 @EnableZuulProxy @SpringBootApplication @EnableZuulProxy public class ApiZuulApplication { public static void main(String[] args) { SpringApplication.run

Spring Cloud Zuul 初始化源码深度解析

烈酒焚心 提交于 2020-03-08 22:16:16
概述   在微服务场景的开发下,网关的重要性不言而喻。Zuul是Netflix开源的微服务网关,Spring Cloud zuul是spring对Zuul进行的整合与增强。本文主要从源码角度对其初始化的过程。 主要包含以下内容 @EnableZuulProxy和@EnableZuulServer的区别 路由配置 ZuulProperties 路由定位器 RouteLocator 与spring mvc的集成 ZuulControler和ZuulHandlerMapping Zuul的饥饿加载 zuul.ribbon.eager-load.enabled zuul的事件监听机制,动态路由的基石。ZuulRefreshListener Filter初始化 Zuul初始化总结 1.@EnableZuulProxy和@EnableZuulServer的区别  在我们使用Spring Cloud Zuul通常是在启动类上添加@EnableZuulProxy注解或@EnableZuulServer。我们查看一下俩个注解的源码 @EnableZuulProxy @EnableCircuitBreaker @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Import