一 前言

zuul路由网关的核心作用是用于后台服务的统一管理;由于微服务是部署在多台服务器上,服务器的ip地址并不能统一,我们需要暴露一个统一的ip地址给前台使用进行接口调用;zuul就是起到路由网关统一作用;再看下Netflix uses Zuul 对zuul使用如下:

  1. Authentication :权限认真
  2. Insights:视野监控
  3. Stress Testing:压力测试
  4. Canary Testing:金丝雀测试
  5. Dynamic Routing:动态路由
  6. Service Migration:服务迁移
  7. Load Shedding:负载均衡削减
  8. Security:安全认证
  9. Static Response handling:静态响应处理
  10. Active/Active traffic management:主动流量管理

本篇文章是初级入门篇,需要一定的前置知识;如果是初学者请移步知识追寻者的springcloud专栏进行系统学习;

二 zuul-client

2.1 pom.xml

创建新工程zuul-client ;spring-cloud-starter-netflix-eureka-client 依赖用于服务注册与发现;

    <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>

2.2 表现层

表现层提供一个测试接口用于zuul-server服务进行统一路由管理;

/**
* @Author lsc
* <p>zuul 路由网关测试表现层 </p>
*/
@RestController
public class ZuulController { @RequestMapping("/zszxz")
public String getUser(String username){
return "hello"+username;
}
}

2.3 application.yml

  1. 指定端口8101
  2. 暴露服务名称zuul-client
  3. eureka服务注册
server:
port: 8101 spring:
application:
name: zuul-client # 应用名称 eureka:
client:
service-url:
# 服务注册地址
defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/
instance:
prefer-ip-address: true

2.4启动类

@EnableDiscoveryClient 用于开启eureka注册与发现

/**
* @Author lsc
* <p> zuul-client启动类</p>
*/
@SpringBootApplication
@EnableDiscoveryClient//开启eureka注册与发现
public class ZuulApp { public static void main(String[] args) {
SpringApplication.run(ZuulApp.class, args);
}
}

三 zuul-server

3.1 pom.xml

创建zuul-server工程,引入eureka,zuul依赖;

    <dependencies>
<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>
</dependencies>

3.2 application.yml

  1. 指定端口8100
  2. 指定应用名称zuul-server
  3. eureka服务注册与发现
  4. zuul 路由规则设置,zuul-client 服务 /** 统一由zuul路由管理为 /api/**
server:
port: 8100 spring:
application:
name: zuul-server # 应用名称 eureka:
client:
service-url:
# 服务注册地址
defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/
instance:
prefer-ip-address: true zuul:
routes:
# zuul-client 路由规则
zuul-client:
path: /api/** # 转发路径
serviceId: zuul-client # 服务id

3.3 启动类

@EnableZuulProxy 开启内嵌路由代理;

/**
* @Author lsc
* <p>zuul-server </p>
*/
@SpringBootApplication
@EnableZuulProxy
public class ZuulServerApp { public static void main(String[] args) {
SpringApplication.run(ZuulServerApp.class, args);
}
}

四 结果测试

4.1 启动工程列表

  1. 分别启动三个eureka-server(1-3), 端口为10081,10082,10083
  2. 启动zuul-client
  3. 启动zuul-server

4.1 访问zuul-client

访问 http://localhost:8101/zszxz?username=zszxz 即正常接口测试

4.2 访问zuul-server

访问 http://localhost:8100/api/zszxz?username=zszxz 网关路由测试

得出结论 zuul-client 服务 /** 所有的路径都会映射zuul-server服务 /api/** 路径;

五 zuul通用配置

5.1 路由简化配置

路由简化配置需要严格的按照服务id对应路由名称进行配置;

原来的路由规则

zuul:
routes:
# zuul-client 路由规则
zuul-client:
path: /api/** # 转发路径
serviceId: zuul-client # 服务id

简化的路由规则如下,

zuul:
routes:
zuul-client: /api/**

5.2 排除路由配置

在日常开发中难免有些内部服务是不提供给外部访问,而是服务端内部之间调用此时就可以使用路由配置进行排除配置;如下配置中会排除所有的服务,除了zuul-client; 当然 读者也可以不用通配符 * ,而是使用具体的服务id;

zuul:
ignoredServices: '*'
routes:
zuul-client: /api/**

5.3 路由配置使用具体ip地址

除了可以使用服务id进行路由配置,还可以使用ip地址进行配置,不过通常不会使用这个选项;

zuul:
routes:
zuul-client:
path: /api/**
url: http://127.0.0.1:8101

5.4 zuul使用ribbon负载均衡

zuul通常使用的是简单eureka自带的负载均衡,现在想要使用ribbon的负载均衡,并且支持HystrixCommand 则需要进行如下配置

zuul:
routes:
zuul-client:
path: /api/**
serviceId: zuul-client
stripPrefix: true #开启前缀 hystrix:
command:
zuul-client:
execution:
isolation:
thread:
timeoutInMilliseconds: 10000 zuul-client:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
listOfServers: http://127.0.0.1:8101,http://127.0.0.1:8102
ConnectTimeout: 1000
ReadTimeout: 3000
MaxTotalHttpConnections: 500
MaxConnectionsPerHost: 100

5.5 排除路径路由配置

5.2节中可以进行排除服务路由,此节还可以排除特定模式的路径接口;如下配置中将会排除zuul-client所有路径中含有admin 路径的接口;

zuul:
ignoredPatterns: /**/admin/**
routes:
zuul-client: /api/**

5.6 多路由配置

之前的配置都是一个服务id配置,如果多个服务进行配置示例如下;具体的服务id和路径由读者自定义;

zuul:
routes:
zuul-client1:
path: /api/1/**
zuul-client2:
path: /api/2**

5.7 排除头信息

如下配置中会排除请求头中的敏感信息,是个不错的选择;

zuul:
routes:
zuul-client:
path: /api/**
sensitiveHeaders: Cookie,Set-Cookie,Authorization
url: http://127.0.0.1:8101

六参考文档

参考文档

zuul-githubhttps://github.com/Netflix/zuul/wiki

springcloud官方文档https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html

源码:

请移步csdn知识追寻者spingcloud专栏说明或者公众号即可获得

springcloud-zuul初级篇的更多相关文章

  1. springcloud(十):服务网关zuul初级篇

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

  2. springcloud(十一):服务网关Zuul高级篇

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  3. 跟我学SpringCloud | 第十篇:服务网关Zuul高级篇

    SpringCloud系列教程 | 第十篇:服务网关Zuul高级篇 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程全 ...

  4. 跟我学SpringCloud | 第十七篇:服务网关Zuul基于Apollo动态路由

    目录 SpringCloud系列教程 | 第十七篇:服务网关Zuul基于Apollo动态路由 Apollo概述 Apollo相比于Spring Cloud Config优势 工程实战 示例代码 Spr ...

  5. 跟我学SpringCloud | 第十三篇:Spring Cloud Gateway服务化和过滤器

    SpringCloud系列教程 | 第十三篇:Spring Cloud Gateway服务化和过滤器 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich. ...

  6. 跟我学SpringCloud | 第三篇:服务的提供与Feign调用

    跟我学SpringCloud | 第三篇:服务的提供与Feign调用 上一篇,我们介绍了注册中心的搭建,包括集群环境吓注册中心的搭建,这篇文章介绍一下如何使用注册中心,创建一个服务的提供者,使用一个简 ...

  7. Python 正则表达式入门(初级篇)

    Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...

  8. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  9. 25个增强iOS应用程序性能的提示和技巧(初级篇)

    25个增强iOS应用程序性能的提示和技巧(初级篇) 标签: ios内存管理性能优化 2013-12-13 10:53 916人阅读 评论(0) 收藏 举报  分类: IPhone开发高级系列(34)  ...

  10. ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇(转)

    ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇   阅读目录 ASP.NET Identity 前世今生 建立 ASP.NET Identity 使用ASP.NET ...

随机推荐

  1. webpack4.x基本配置

    在学习vue的时候,需要进行打包操作,视频看的是webpack3的踩了好多坑,所以在记录一下,方便后续复习.有错误请指出. 新建项目文件 在项目文件下 执行npm init -y,进行初始化,生成pa ...

  2. opencv:边缘保留滤波

    EPF滤波概述 均值与滤波的缺点:并没有考虑中心像素点对整个输出像素的贡献,实际上锚定的那个点贡献应该是最大的 高斯滤波的缺点:当边缘值梯度很大的时候,应减少中心像素点的权重,而高斯滤波没有考虑 边缘 ...

  3. AcWing 849. Dijkstra求最短路 I 朴素 邻接矩阵 稠密图

    //朴素Dijkstra 边权都是正数 稠密图:点和边差的比较多 #include<cstring> #include<iostream> #include<algori ...

  4. 【PAT甲级】1109 Group Photo (25分)(模拟)

    题意: 输入两个整数N和K(N<=1e4,K<=10),分别表示人数和行数,接着输入N行每行包括学生的姓名(八位无空格字母且唯一)和身高([30,300]的整数).按照身高逆序,姓名字典序 ...

  5. Day2 异常 日志 反射

    调用方如何获知调用失败的信息? 1.约定返回错误码.处理一个文件,如果返回0,表示成功,返回其他整数,表示约定的错误码: 2.在语言层面上提供一个异常处理机制 异常 异常是一种class,因此它本身带 ...

  6. Python单例

    01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码.让代码更容易被他人理解.保 ...

  7. 每天进步一点点------Altium Designer集成库简介及创建

    一.集成库概述    Altium Designer 采用了集成库的概念.在集成库中的元件不仅具有原理图中代表元件的符号,还集成了相应的功能模块.如Foot Print 封装,电路仿真模块,信号完整性 ...

  8. 深入delphi编程理解之消息(二)发送消息函数及消息编号、消息结构体的理解

    一.delphi发送消息的函数主要有以下三个: (一).SendMessage函数,其原型如下: function SendMessage( hWnd: HWND; {目标句柄} Msg: UINT; ...

  9. Sql性能优化梳理

    前言 先简单梳理下Mysql的基本概念,然后分创建时和查询时这两个阶段的优化展开. 1.0 基本概念简述 1.1 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析 ...

  10. SQL - 各种joins