Zuul 2终于开源了 。 我第一次听到Zuul 2年Spring由米奇·科恩一个2016的讲就是可以在这里找到 ,这是好事,终于可以用它玩。

为了快速实现Zuul 2之类的网关的目的–网关提供了微服务生态系统的切入点。 由于所有客户的请求都是通过网关路由的,因此它可以控制路由,请求和响应流经网关的各个方面–

  • 基于不同标准的路由-uri模式,标头等
  • 监控服务运行状况
  • 对原始服务器的负载平衡和限制请求
  • 安全
  • 金丝雀测试

我在这篇文章中的目标很简单–编写一个Zuul2过滤器,该过滤器可以删除路径前缀并将请求发送到下游服务并返回。

Zuul2过滤器是定制Zuul的机制。 假设客户发送请求到/ passthrough / someapi调用,那么我希望Zuul 2层使用/ someapi uri将请求转发到下游服务。 Zuul2过滤器通常打包为常规文件,并动态加载(并可能刷新)并应用。 不过,我的示例会有所不同,我的过滤器是用Java编码的,因此我不得不绕过Zuul内置的加载机制。

简单地遵循代码即可,该代码可在我的github存储库中找到 – https://github.com/bijukunjummen/boot2-load-demo/tree/master/applications/zuul2-sample,与以下代码打包在一起提供相似功能的一组样本。 该代码基于此处提供的Zuul 2示例。

这是我的过滤器的外观:

import com.netflix.zuul.context.SessionContext;
import com.netflix.zuul.filters.http.HttpInboundSyncFilter;
import com.netflix.zuul.message.http.HttpRequestMessage;import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class StripPrefixFilter extends HttpInboundSyncFilter {private final List<String> prefixPatterns;public StripPrefixFilter(List<String> prefixPatterns) {this.prefixPatterns = prefixPatterns;}@Overridepublic HttpRequestMessage apply(HttpRequestMessage input) {SessionContext context = input.getContext();String path = input.getPath();String[] parts = path.split("/");if (parts.length > 0) {String targetPath = Arrays.stream(parts).skip(1).collect(Collectors.joining("/"));context.set("overrideURI", targetPath);}return input;}@Overridepublic int filterOrder() {return 501;}@Overridepublic boolean shouldFilter(HttpRequestMessage msg) {for (String target: prefixPatterns) {if (msg.getPath().matches(target)) {return true;}}return false;}
}

它扩展了“ HttpInboundSyncFilter”,这些过滤器处理入站到原始服务器的请求。 可以想象,有一个“ HttpOutboundSyncFilter”可以拦截来自原始服务器的出站呼叫。 这些“同步”过滤器有一个“ HttpInboundFilter”和“ HttpOutboundFilter”对应物,它们返回RxJava Observable类型。

我的过滤器实现中有一个魔术字符串“ overrideUri”。 如果您对我如何发现它是替代uri感到好奇,那就是通过扫描Zuul2代码库。 Netflix内部可能使用了很多过滤器,但尚未发布以供一般使用。

有了此过滤器后,我通过使用此组件显式注册我的自定义过滤器来绕过Zuul2的动态groovy脚本加载功能:

import com.netflix.zuul.filters.FilterRegistry;
import com.netflix.zuul.filters.ZuulFilter;import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;public class FiltersRegisteringService {private final List<ZuulFilter> filters;private final FilterRegistry filterRegistry;@Injectpublic FiltersRegisteringService(FilterRegistry filterRegistry, Set<ZuulFilter> filters) {this.filters = new ArrayList<>(filters);this.filterRegistry = filterRegistry;}public List<ZuulFilter> getFilters() {return filters;}@PostConstructpublic void initialize() {for (ZuulFilter filter: filters) {this.filterRegistry.put(filter.filterName(), filter);}}
}

我不得不做一些较小的调整,以引导我的自定义过滤器来完成整个设置,这些可以在github repo中进行 。

一旦启动了带有该自定义过滤器的Zuul2示例,其行为就是在删除了前缀“ / passthrough”之后,对/ passthrough / messages的任何请求都会路由到下游系统。 启动Zuul 2应用程序的说明是repo的README的一部分。

这是编写自定义Zuul2过滤器的快速入门,我希望这给了足够的感觉来评估Zuul 2。

翻译自: https://www.javacodegeeks.com/2018/06/zuul-2-sample-filter.html

Zuul 2 –样本过滤器相关推荐

  1. Spring Cloud源码分析(四)Zuul:核心过滤器

    通过之前发布的<Spring Cloud构建微服务架构(五)服务网关>一文,相信大家对于Spring Cloud Zuul已经有了一个基础的认识.通过前文的介绍,我们对于Zuul的第一印象 ...

  2. Spring-Cloud 微服务网关Zuul、ZuulFilter过滤器和限流

    微服务网关 一. Zuul网关 1. 创建工程 并导入依赖 2. application.yml 配置文件 3. 启动类添加注解 4. 依次启动服务 5. 进入浏览器访问测试 二. ZuulFilte ...

  3. zuul过滤器_Zuul 2 –样本过滤器

    zuul过滤器 Zuul 2终于开源了 . 我第一次听到Zuul 2年Spring由米奇·科恩一个2016的讲就是可以在这里找到 ,这是好事,终于可以用它玩. 为了快速实现Zuul 2之类的网关的目的 ...

  4. 给zuul网关添加过滤器

    网关的登录拦截器 接下来,我们在Zuul编写拦截器,对用户的token进行校验,如果发现未登录,则进行拦截. 引入jwt相关配置 既然是登录拦截,一定是前置拦截器,我们在leyou-gateway中定 ...

  5. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  6. 路由网关--spring cloud zuul

    路由网关--spring boot Zuul 1.为什么需要Zuul? Zuul Ribbon 以及 Eureka 相结合,可以实现智能路由和负载均衡的功能, Zuul 能够将请求流量按某种策略分发到 ...

  7. 7、Spring -Cloud-路由网管Spring Cloud Zuul

    7.1.为什么需要Zuul Zuul 作为路由网关组件,在微服务架构中有着非常重要的作用: 7.2.Zuul的工作原理 Zuul 是通过 Servlet 来实现的, Zuul 通过自定义的 Zuu!S ...

  8. properties 配置回车_非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!...

    本文同步Java知音社区,专注于Java 作者:kosamino http://www.cnblogs.com/jing99/p/11696192.html Zuul是spring cloud中的微服 ...

  9. Spring cloud zuul跨域(一)

    项目背景: 我们有web和大屏,以及移动端,需要访问微服务接口. 然而大屏时自己打开的网页,在网页中通过js调用我的webapi.出现了跨域情况. 原因: 出现这个问题,是由于跨域请求有2次请求. 第 ...

最新文章

  1. 一文读懂最近流行的CNN架构(附学习资料)
  2. 数据库防火墙——实现数据库的访问行为控制、危险操作阻断、可疑行为审计...
  3. java 匿名函数 构造_Java匿名内部类与Lambda表达式
  4. python如何撤销_python 中使用函数的方法取消转义
  5. 指令系统寻址方式——指令寻址,数据寻址
  6. AppBoxFuture(四). 随需而变-Online Schema Change
  7. 【新功能】媒体处理MPS全新支持自适应多码率、多语言音轨
  8. Java一只青蛙每次跳3米_行测丨青蛙跳5米下滑3米?怎么办!
  9. 7 win 卸载node_如何从windows中完全删除node.js_windows彻底卸载node教程
  10. linux yum 命令 详解
  11. 深入浅出MFC笔记(5)
  12. Matlab 自定义imagesc彩色渲染
  13. 高数——关于微分方程共轭复根引发的复数思考
  14. 关于如何去实现百度的自动发帖功能猜想
  15. 上海疫情中的云婚礼:千人“吃席” 这场婚礼太温暖
  16. 《AutoCAD 2014中文版超级学习手册》——第2章 图层设置 2.1 设置图层
  17. Mac 下使用apt-get
  18. 国产智能手机正在消失的一项功能
  19. 【Lesson 10】中古调式
  20. 简单方便的图片处理,让你颠倒的图片恢复正常

热门文章

  1. [ZJOI2005]午餐(贪心+dp)
  2. 2018 计蒜之道 复赛
  3. Sentinel(十九)之主流框架的适配
  4. 如何求解两个数的最大公约数
  5. taro 缺点_Taro小程序富文本解析4种方法
  6. 优先队列——二项队列(binominal queue)
  7. 设计模式 工厂方法_工厂方法设计模式
  8. java超出gc开销_通过这5个简单的技巧减少GC开销
  9. ruby elixir_如何使用Elixir和Phoenix快速入门构建CRUD REST API
  10. java fastutil_具有FastUtil的精简Java集合