SpringCloud微服务(05):Zuul组件,实现路由网关控制
本文源码:GitHub·点这里 || GitEE·点这里
一、Zuul组件简介
1、基础概念
Zuul 网关主要提供动态路由,监控,弹性,安全管控等功能。在分布式的微服务系统中,系统被拆为了多个微服务模块,通过zuul网关对用户的请求进行路由,转发到具体的后微服务模块中。
2、Zuul的作用
1)按照不同策略,将请求转发到不同的服务上去;
2)聚合API接口,统一对外暴露,提高系统的安全性;
3)实现请求统一的过滤,以及服务的熔断降级;
3、案例结构
启动顺序如下:
# 注册中心 node05-eureka-7001 # 两个服务提供者 node05-provider-6001 node05-provider-6002 # 网关控制 node05-zuul-7002
启动成功后,注册中心展示如下:
二、Zuul使用详解
1、核心依赖
<!-- 路由网关 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency>
2、核心配置文件
server: port: 7002 spring: application: name: cloud-node05-parent eureka: instance: prefer-ip-address: true client: service-url: defaultZone: http://registry01.com:7001/eureka/ zuul: # 前缀,可以用来做版本控制 prefix: /v1 # 禁用默认路由,执行配置的路由 ignored-services: "*" routes: # 配置6001接口微服务 pro6001: serviceId: node05-provider-6001 path: /api-6001/** # 配置6002接口微服务 pro6002: serviceId: node05-provider-6002 path: /api-6002/**
- 启动类注解:@EnableZuulProxy
3、统一服务降级
实现FallbackProvider接口,自定义响应提示。
@Component public class FallBackConfig implements FallbackProvider { private static final Logger LOGGER = LoggerFactory.getLogger(FallBackConfig.class) ; @Override public ClientHttpResponse fallbackResponse(Throwable cause) { // 捕获超时异常,返回自定义信息 if (cause instanceof HystrixTimeoutException) { return response(HttpStatus.GATEWAY_TIMEOUT); } else { return fallbackResponse(); } } private ClientHttpResponse response(final HttpStatus status) { return new ClientHttpResponse() { @Override public HttpStatus getStatusCode() { return status; } @Override public int getRawStatusCode() { return status.value(); } @Override public String getStatusText() { return status.getReasonPhrase(); } @Override public void close() { LOGGER.info("close"); } @Override public InputStream getBody() { String message = "{\n" + "\"code\": 200,\n" + "\"message\": \"微服务飞出了地球\"\n" + "}"; return new ByteArrayInputStream(message.getBytes()); } @Override public HttpHeaders getHeaders() { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); return headers; } }; } @Override public String getRoute() { return "*"; } @Override public ClientHttpResponse fallbackResponse() { return response(HttpStatus.INTERNAL_SERVER_ERROR); } }
4、统一过滤器
继承ZuulFilter类,自定义过滤动作。
@Component public class FilterConfig extends ZuulFilter { private static final Logger LOGGER = LoggerFactory.getLogger(FilterConfig.class) ; @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext requestContext = RequestContext.getCurrentContext() ; try { doBizProcess(requestContext); } catch (Exception e){ LOGGER.info("异常:{}",e.getMessage()); } return null; } public void doBizProcess (RequestContext requestContext) throws Exception { HttpServletRequest request = requestContext.getRequest() ; String reqUri = request.getRequestURI() ; if (!reqUri.contains("getAuthorInfo")){ requestContext.setSendZuulResponse(false); requestContext.setResponseStatusCode(401); requestContext.getResponse().getWriter().print("Path Is Error..."); } } }
5、测试流程
1)测试网关配置
访问如下接口,响应正常,说明网关配置生效:
http://localhost:7002/v1/api-6001/getAuthorInfo/1 http://localhost:7002/v1/api-6002/getAuthorInfo/2
2)测试服务降级
关闭6001服务,再次访问接口,提示信息如下,说明服务降级策略生效:
{ "code": 200, "message": "微服务飞出了地球" }
3)测试过滤器
因为请求URI不匹配getAuthorInfo,所以被拦截,说明过滤器略生效:
http://localhost:7002/v1/api-6001/ 响应提示: Path Is Error...
三、源代码地址
GitHub·地址 https://github.com/cicadasmile/spring-cloud-base GitEE·地址 https://gitee.com/cicadasmile/spring-cloud-base
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
云原生生态周报 Vol. 21 | Traefik 2.0 正式发布
作者 |浔鸣、心水、元毅、源三、衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 个成员扩展到 11 个,新增的两个职位分别负责最终用户和项目维护。 NASA 开发团队拥抱 K8s 出于对云原生、零信任和开源的严格要求,开发团队最后选择构建一个 Kubernetes 平台,以实现开发人员与非开发人员的轻松协作,无需借助任何复杂工具。 Traefik 2.0正式发布 Træfik 是一个新型的 http 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (Docker, Mesos/Marathon, Etcd, BoltDB...) ,可以对配置进行自动化、动态的管理。此次大版本的更新添加了许多功能,比如备受期待的支
- 下一篇
藏不住了,这就是阿里 AI 的真正实力!
不好意思,我要放大招了! 在今天的杭州云栖大会上,阿里巴巴首次公布人工智能调用规模: 每天调用超 1万亿 次服务全球 10亿 人日处理图像 10亿 张视频 120万 小时语音 55万 小时自然语言 5千亿 句 在AI芯片、AI云服务、AI算法、AI平台、产业AI,阿里巴巴实现全线领先! 有才的网友还帮我们做了一张图 666 ↓↓ 在AI芯片层,平头哥发布全球最强AI芯片含光800,打破业界纪录,性能及能效比全球第一,1块含光800算力就相当于10块GPU。 在AI云服务层,全球前三、亚太第一的阿里云已构建起亚洲种类最全、规模最大的人工智能集群,包括GPU、FPGA、NPU、CPU、超算集群、第三代神龙架构等在内的公共云服务共同形成面向人工智能产业的最强力支持。 在AI平台层,飞天AI平台、飞天大数据平台、AIoT平台等大大降低AI开发门槛。其中,飞天AI平台是国内首个云端商业化机器学习平台,支持上百亿特征、千亿训练样本的超大规模经典算法。 在AI算法层,达摩院成立两年来在自然语言处理、智能语音、视觉计算等领域夺得40多项世界第一。 阿里的人工智能既对内实践,也对外服务。 内部实践中,阿...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果