1. 禁用过滤器

# zuul.<SimpleClassName>.<filterType>.disable=true
# 例如禁用 自定义的过滤器
zuul.MyFilter.pre.disable=true

2. 路由的映射

  方法1:

zuul.routes.spring-cloud-provider=/provider/**
zuul.routes.spring-cloud-consumer=/consumer/**

  说明:spring-cloud-provider服务名称,对其进行路由,一个*代表匹配一层,二个**代表匹配所有

  测试:http://localhost:9876/consumer/user/1

  测试:http://localhost:9876/provider/api/user/1

  方法2:

zuul.routes.provider1.path=/provider1/**
zuul.routes.provider1.service-id=spring-cloud-provider
zuul.routes.consumer1.path=/consumer1/**
zuul.routes.consumer1.service-id=spring-cloud-consumer

  说明:provider1和consumer1代表id,自己定,只要不重复即可。

  测试:http://localhost:9876/consumer/user/1

  测试:http://localhost:9876/provider/api/user/1

3. 禁用服务名进行访问

zuul.ignored-services=/spring-cloud-provider
# zuul.ignored-services=/* 禁用所有

4. strip-prefix(代理前缀)的灵活使用

#strip-prefix 的配置()
# 默认为true,(代理前缀默认会从请求路径中移除)
zuul.routes.provider1.strip-prefix=false
zuul.routes.provider1.path=/api/**
zuul.routes.provider1.service-id=spring-cloud-provider
zuul.routes.consumer1.strip-prefix=false
zuul.routes.consumer1.path=/consumer1/**
zuul.routes.consumer1.service-id=spring-cloud-consumer1

  测试:http://localhost:9876/provider/api/user/1

5. sensitive-headers属性(不传递给下游的服务应用)

zuul.routes.provider1.sensitive-headers=token
# 默认值 Cookie, Set-Cookie,Authorization
# 注意:如果不禁用服务名的情况下,通过服务名,这个设置是无效的

6. 脱离注册中心,不使用注册中心

# 禁用注册中心
ribbon.eureka.enabled=false # 不实现负载均衡
#zuul.routes.wangx.path=/**
#zuul.routes.wangx.url=http://baidu.com #实现负载均衡
zuul.routes.wangx.path=/**
zuul.routes.wangx.service-id=wangx-x
wangx-x.ribbon.listOfServers=http://baidu.com,http://spring.io

7. 自定义路由策略

  使用正则表达式,自定义bean

  @Bean
public PatternServiceRouteMapper serviceRouteMapper() {
return new PatternServiceRouteMapper("(?<name1>^.*)-(?<name2>c.*)-(?<name3>c.+$)", "${name1}-${name2}-provider") {
@Override
public String apply(final String serviceId) {
String route = super.apply(serviceId);
System.out.println(route + " -> " + serviceId);
return route;
}
};
}

  打印:

  spring-cloud-provider -> spring-cloud-consumer

  spring-cloud-zuul -> spring-cloud-zuul

  spring-cloud-provider -> spring-cloud-provider

  说明:将provider转发到consumer

8. ignored-parrterns 说明

  zuul.ignored-patterns=/**/api/**

  忽略含有api的路径的url

9. legacy说明

  zuul.routers.legacy.path=/**

  zuul.routers.legacy.url=http://baidu.com

  #若前面的路由匹配不到,那么就使用这个

10. 上传大文件

  提供者代码

 @RequestMapping("/upload")
public String upload(@RequestParam("file")MultipartFile file) throws IOException {
File file1 = new File("F:/" + file.getOriginalFilename());
System.out.println("开始上传文件......");
FileCopyUtils.copy(file.getBytes(),file1);
return "SUCCESS";
}

  设置上传文件最大值

# 上传文件最大值
spring.servlet.multipart.max-file-size=1000MB
spring.servlet.multipart.max-request-size=1000MB

  测试:curl -F "file=@eclipse.zip" http://localhost:8976/api/user/upload

 使用隐藏连接/zuul/

  curl -F "file=@eclipse.zip" http://localhost:8976/zuul/api/user/upload

  设置

  

hystrix.command.defautl.execution.isolation.thread.timeoutInMilliseconds=6000
#全局设置
ribbon.ConnectTimeout=6000
ribbon.ReadTimeout=6000
# 单独设置
provider1.ribbon.ConnectTimeout=300

11. 异常处理

  

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream; import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component; @Component
public class ProviderFallbackProvider implements ZuulFallbackProvider { @Override
public String getRoute() {
return "spring-cloud-provider";
} @Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() { @Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
} @Override
public int getRawStatusCode() throws IOException {
return 200;
} @Override
public String getStatusText() throws IOException {
return "OK";
} @Override
public void close() { } @Override
public InputStream getBody() throws IOException {
return new ByteArrayInputStream((getRoute()+ " is fallback").getBytes());
} @Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return headers;
}
};
}
}

SpringCloud学习笔记(20)----Spring Cloud Netflix之服务网关Zuul的各种姿势的更多相关文章

  1. SpringCloud学习笔记(19)----Spring Cloud Netflix之服务网关Zuul自定义过滤器

    zuul不仅只是路由,还可以自定义过滤器来实现服务验证. 实现案例:自定义过滤器,检验头部是否带有token,如果token=wangx,则通过校验,若不存在或不为wangx则返回提示token错误. ...

  2. SpringCloud学习笔记(17)----Spring Cloud Netflix之服务网关Zuul的使用

    1. 什么时候Zuul? Zuul是一个基于jvm路由和服务端的负载均衡器,在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架. 路由功能:相当于nginx的反向代理 比如: / 可能需要映射到 ...

  3. SpringCloud学习笔记(18)----Spring Cloud Netflix之服务网关Zuul原理

    1. Zuul的工作机制 Zuul提供了一个框架,可以对过滤器进行动态的加载,编译,运行.过滤器之间没有直接的相互通信,他们是通过一个RequestContext的静态类来进行数据传递的.Requet ...

  4. Spring Cloud(十):服务网关zuul(转)

    前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...

  5. springCloud学习-消息总线(Spring Cloud Bus)

    1.简介 Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现 ...

  6. SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么

    从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...

  7. SpringCloud学习笔记(四):Eureka服务注册与发现、构建步骤、集群配置、Eureka与Zookeeper的比较

    简介 Netflix在设计Eureka时遵守的就是AP原则 拓展: 在分布式数据库中的CAP原理 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availab ...

  8. SpringCloud学习笔记(1)----认识微服务与SpringCloud

    1.  微服务是什么? 微服务是一种由多个服务组成的集合体,它属于一种软甲架构,在微服务中,它的每个服务都是独立存在的,微服务是一种去中心化的思想. 它具有开发简单,技术栈灵活,服务独立解耦,可用性高 ...

  9. SpringCloud学习笔记-Eureka基础

    Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的微服务治理功能. 服务端 ...

随机推荐

  1. struts2的DTD配置文件

    新手可以看看,高手可以跳过…… 最近在学习struts2这个框架,自己也动手写过一些DTD文件,所以很好struts2这个DTD文件是怎么写的,接下来就一个一个的分析 根元素是struts,然后又4个 ...

  2. gvim74 提示报错 “无法加载库python27.dll”

    官方提供的gvim安装文件默认是支持python和python3两种模式的,编译时带有该选项,但并没有附带对应的运行库和运行环境.所以在本地没有安装python时直接在vim中执行 :py print ...

  3. 路飞学城Python-Day32

    36-进程池线程池 开多线程实现并发的效率是高的,当用户没有那么多的时候,服务器是可以承受压力的 但是一定要以某种方式来设置并发数,让服务器能够实现稳定的运行,控制服务器的线程数 设置池,往里面放池的 ...

  4. MySQL的读写分离的几种选择

    MySQL的读写分离的几种选择 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 原址如下: http://heylinux.com/archives/1004. ...

  5. PHP下的Oauth2.0尝试 - OpenID Connect

    OpenID Connect OpenID Connect简介 OpenID Connect是基于OAuth 2.0规范族的可互操作的身份验证协议.它使用简单的REST / JSON消息流来实现,和之 ...

  6. oracle数据库服务介绍

    共有7个服务,这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service ...

  7. [BZOJ1975]HH去散步 图论+矩阵

    ###[BZOJ1975]HH去散步 图论+矩阵 题目大意 要求出在一个m条边,n个点的图中,相邻两次走的边不能相同,求在t时间时从起点A走到终点B的路径方案总数.将答案mod45989 输入格式: ...

  8. poj3101--Astronomy(分数的最小公倍数)

    题目链接:id=3101">点击打开链接 题目大意:有n个行星,给出每个行星的旋转的周期.问最少多少时间后n个行星会在一条直线上,初始点在一起,不存在全部的行星都有同一个周期 如果A行 ...

  9. 深刻理解Docker镜像大小

    都说容器大法好,可是假设没有Docker镜像,Docker该是多无趣啊. 是否还记得第一个接触Docker的时候,你从Docker Hub下拉的那个镜像呢?在那个处女镜像的基础上.你执行了容器生涯的处 ...

  10. 【LeetCode-面试算法经典-Java实现】【168-Excel Sheet Column Title(Excell列标题)】

    [168-Excel Sheet Column Title(Excell列标题)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a positive in ...