7、Spring -Cloud-路由网管Spring Cloud Zuul
7.1、为什么需要Zuul
Zuul 作为路由网关组件,在微服务架构中有着非常重要的作用:
7.2、Zuul的工作原理
请求的生命周期图:
7.3、案例
7.3.1、搭建 Zuul 服务
pom文件:
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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>
spring.application.name=feign server.port=8087 eureka.client.service-url.defaultZone=http://localhost:8762/eureka/ #开启Hystrix的功能 feign.hystrix.enabled=true
在下方配置文件的使用:
spring.application.name=hystric server.port=8088 eureka.client.service-url.defaultZone=http://localhost:8762/eureka/ #开启Hystrix的功能 feign.hystrix.enabled=true
在下方配置文件的使用:
新建工程的配置类:
@EnableZuulProxy @EnableEurekaClient @SpringBootApplication public class EurekaZuulClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaZuulClientApplication.class, args);} }
eureka:client:service-url:defaultZone: http://localhost:8762/eureka/ server:port: 5000 spring:application:name: zuulzuul:routes:#自定义的ribbonapi:#路径path: /ribbonapi/**#引入的application(上述需要使用到的工程名)serviceid: hystricfeignapi:path: /feignapi/**serviceid: feign
zuul:routes:ribbonapi:path: /ribbonapi/**serviceid: hystric url: http://localhost:8089
7.3.2、Zuul 上配置 API 接口的版本号
7.3.3、Zuul 上配置熔断器
package com.cr.eurekazuulclient.zull;import org.slf4j.LoggerFactory; import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider; 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;import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.logging.Logger;@Component public class MyFallbackProvider implements FallbackProvider {@Overridepublic String getRoute() {// 表明是为哪个微服务提供回退,*表示为所有微服务提供回退return "hystric";}public ClientHttpResponse fallbackResponse(){return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.OK;}@Overridepublic int getRawStatusCode() throws IOException {return 200;}@Overridepublic String getStatusText() throws IOException {return "OK";}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {return new ByteArrayInputStream("The service is unavailable.".getBytes());}@Overridepublic HttpHeaders getHeaders() {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);return headers;}};}@Overridepublic ClientHttpResponse fallbackResponse(String route, Throwable cause) {if (cause != null && cause.getCause() != null){String reason = cause.getCause().getMessage();System.out.println("exception:" + reason);}return fallbackResponse();} }
重启hystrix服务:
7.3.4、在Zuul中使用过滤器
过滤器的类型:
package com.cr.eurekazuulclient.zull;import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest; import java.util.logging.Logger;@Component public class MyZuulFilter extends ZuulFilter {//private static Logger log= (Logger) LoggerFactory.getLogger(MyZuulFilter.class); @Overridepublic String filterType() {return "pre";}@Overridepublic int filterOrder() {return 1;}@Overridepublic boolean shouldFilter() {return true;}@Overridepublic Object run() throws ZuulException {RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();Object accessToken = request.getParameter("token");if (accessToken == null){System.out.println("token is empty");//log.warning("token is empty");ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(401);try {ctx.getResponse().getWriter().write("token is empty");}catch (Exception e){return null;}}return null;} }
此时请求:
此时加上参数token:
7.3.5、Zuul常见的使用方式
转载于:https://www.cnblogs.com/Mrchengs/p/10654069.html
7、Spring -Cloud-路由网管Spring Cloud Zuul相关推荐
- Spring学习:一、Spring概述、Spring入门
1 Spring概述 1.1 什么是Spring Rod Johnson(http://baike.baidu.com/item/Rod Johnson)在2002年编著的<Expert one ...
- Spring Cloud【Finchley】-15 查看Zuul的路由端点和过滤器
文章目录 概述 确认spring-boot-starter-actuator依赖 application.yml配置启用所有的监控端点 启动服务 查看 Routes Endpoint 查看 Filte ...
- Spring Cloud学习笔记—网关Spring Cloud Gateway官网教程实操练习
Spring Cloud学习笔记-网关Spring Cloud Gateway官网教程实操练习 1.Spring Cloud Gateway介绍 2.在Spring Tool Suite4或者IDEA ...
- spring cloud 路由
Spring Cloud Feign:用于微服务之间,只映射内网ip Spring Cloud Gateway:用于服务端,对外开放的接口,对外统一访问gateway映射的ip 是这样吗? 但是这样权 ...
- 《springcloud超级入门》Spring Cloud是什么?Spring Cloud版本介绍《二》
Spring cloud是一系列框架的有序集合.它利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册.服务发现.配置中心.消息总线.负载均衡.断路器.数据监控 ...
- Spring Cloud(10)——新一代网关Spring Cloud Gateway
文章目录 Spring Cloud(10)--新一代网关Spring Cloud Gateway 1.背景知识--API网关 2.Spring Cloud Gateway 详细概述 3.Spring ...
- Spring Cloud浅谈个人尝鲜------Zuul 服务网关(五)
Spring Cloud浅谈个人尝鲜------Zuul 服务网关(五) 前面几篇文章我们学习了Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止 ...
- 【云原生】Spring Cloud是什么?Spring Cloud版本介绍
什么是SpringCloud 上一章节介绍了总体的SpringCloud的总体学习章节,因为最近项目刚好需要用到SpringCloud来搭建微服务项目.所以就跟着大家一起来再学习巩固下SpringCl ...
- spring cloud (一):大话 Spring Cloud
转自:http://www.ityouknow.com/springcloud/2017/05/01/simple-springcloud.html 研究了一段时间Spring Boot了准备向Spr ...
最新文章
- 机器学习常用损失函数小结
- C语言找最大的int型数!_只愿与一人十指紧扣_新浪博客
- 一阶导与二阶导的关系_数学分析|第九章 定积分关于二阶导函数正负和定积分结合证明不等式问题总结...
- nodeValue以及其与value的区别以及JS nodeName、nodeValue、nodeType返回类型
- Hadoop实例之利用MapReduce实现Wordcount单词统计 (附源代码)
- C编程,随机数,排序
- JAVA:Java二维数组处理-Bit型转Bitmap
- 《树莓派渗透测试实战》——2.12 用例子总结以上步骤
- java多个页面爬取_java爬取html页面(简易通用版)
- JavaScript类型强制解释
- IT程序猿应该投资些什么
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC2
- java计算机毕业设计服装连锁店后台管理系统MyBatis+系统+LW文档+源码+调试部署
- Tampermonkey油猴插件——使用教程整理
- 项目管理的过程中如何做好沟通管理
- java软件工程师是做什么的_JAVA软件工程师是做什么的?
- 分享一个互联网职业教育免费视频、资料、机构综合类资源平台!
- pt-online-schema-change 脚本化
- 编程中实例是什么?什么是实例?实例化又是什么?什么是类?什么是对象?
- 数据库的一些基础知识
热门文章
- 米扑博客:总结分享 WordPress显示评论者IP归属地、浏览器、终端设备、电信运营商...
- 手动代码约束,等比例
- 新手初学Regular Expression正则表达式--快速入门
- 缩略图在网页设计中应用的35个优秀案例
- python selenium 文件上传_Python+Selenium学习--上传文件
- 0x00000000指令引用的内存不能为written_jvm的内存结构
- java 嵌套类 继承_Java嵌套类 - 爱吃苹果的搬运工的个人空间 - OSCHINA - 中文开源技术交流社区...
- nurbs建模能用MATLAB么,NURBS(matlab生成nurbs曲线图像)
- yum update php5.5,(二)Centos7下Yum更新安装PHP5.5,5.6,7.0
- ASP.NET Razor – 标记简介