博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud 2.x学习笔记:4、Zuul(Greenwich版本)
阅读量:2389 次
发布时间:2019-05-10

本文共 3563 字,大约阅读时间需要 11 分钟。

1、Zuul简介

zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。

请参考官方文档:

Zuul的主要功能是路由转发过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。

2、新建模块

2.1 pom文件

4.0.0
com.cntaiping.tpa
zuul
0.0.1-SNAPSHOT
jar
zuul
Demo project for Spring Boot
com.cntaiping.tpa
cloud
1.0-SNAPSHOT
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-zuul

2.2 application.properties

eureka.client.serviceUrl.defaultZone=http://localhost:8800/eureka/server.port=8400spring.application.name=service-zuul#表示只要访问以/api-a/开头的多层目录都可以路由到 id为compute-service的服务上zuul.routes.consumer-feign=/api-a/**zuul.routes.consumer-hystrix=/api-b/**

服务消费者也可以作为服务提供者。

以/api-a/ 开头的请求都转发给consumer-feign服务;以/api-b/开头的请求都转发给consumer-hystrix服务;

2.3 Application类

package com.cntaiping.tpa.zuul;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.SpringCloudApplication;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;/** * @SpringCloudApplication注解 * 整合了@SpringBootApplication、@EnableEurekaClient、@EnableCircuitBreaker * 主要目的还是简化配置 */@EnableZuulProxy@SpringCloudApplicationpublic class ZuulApplication {    public static void main(String[] args) {        SpringApplication.run(ZuulApplication.class, args);    }}

2.4 运行效果

从执行结果可以说明zuul起到了路由的作用

在这里插入图片描述

在这里插入图片描述

3、过滤器

可以通过zuul提供的过滤器,进行一些请求过滤,比如安全验证。

停止模块,增加过滤器类如下。

package com.cntaiping.tpa.zuul.filter;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;@Componentpublic class TokenFilter extends ZuulFilter {    private static Logger log = LoggerFactory.getLogger(TokenFilter.class);   /**    返回一个字符串代表过滤器的类型,    pre:路由之前    routing:路由之时    post: 路由之后    error:发送错误调用   */    @Override    public String filterType() {        return "pre";    }    /**      过滤的顺序   */    @Override    public int filterOrder() {        return 0;    }    /**      这里可以写逻辑判断,是否要过滤,本文true,永远过滤。    */    @Override    public boolean shouldFilter() {        return true;    }    /**      过滤器的具体逻辑。   */    @Override    public Object run() throws ZuulException {        RequestContext ctx = RequestContext.getCurrentContext();        HttpServletRequest request = ctx.getRequest();        log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));        Object accessToken = request.getParameter("token");        if(accessToken == null) {            log.warn("token is empty");            ctx.setSendZuulResponse(false);            ctx.setResponseStatusCode(401);            try {                ctx.getResponse().getWriter().write("token is empty");            }catch (Exception e){}            return null;        }        log.info("ok");        return null;    }}

重新运行模块

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

转载地址:http://wwtab.baihongyu.com/

你可能感兴趣的文章
程序员休息时间接私活遭公司辞退,不明觉厉?
查看>>
CSS 、JS实现浪漫流星雨动画
查看>>
2018年前端性能优化总结,这也是我做程序员的第五个年头了
查看>>
程序员30岁前,月薪达不到30K,该何去何从?
查看>>
Windows资源管理器相关信息获取
查看>>
windows资源管理器及ie监听
查看>>
No module named 'Crypto'
查看>>
常用openstack的镜像下载及密码
查看>>
详解python中的浅拷贝和深拷贝
查看>>
详解python中闭包和装饰器
查看>>
修改openstack云主机的IP地址
查看>>
ubuntu系统的定制裁剪(适用于嵌入式瘦客户端)
查看>>
嵌入式之系统移植详解(linux)
查看>>
openstack之 glance_image和instances存储目录解析
查看>>
centos7(三节点)搭建ceph环境
查看>>
将linux(ubuntu)安装到U盘下面--便携式ubuntu和使用dd制作U盘安装工具
查看>>
linux之强大的find命令
查看>>
python使用变量操作mysql语句
查看>>
linux bridge 网桥详解
查看>>
ceph&openstack发展前景
查看>>