Zuul 2 –样本过滤器

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel之抽奖器实现

Excel实现一个抽奖器&#xff0c;关键在于学会几个Excel中的函数即可轻松实现。 单人抽奖 RANDBETWEEN 例&#xff1a; INDEX(A2:A61,RANDBETWEEN(1,60))缺点&#xff1a;这种方式生成的抽奖器&#xff0c;在多人情况下&#xff0c;由于RANDBETWEEN函数的返回值有可能是相同…

【RS码1】系统RS码编码原理及MATLAB实现(不使用MATLAB库函数)

关注公号【逆向通信猿】更精彩!!! 基础知识 要想搞懂本节知识,需要先熟悉掌握以下前几篇博客 【多元域乘法】多项式乘法电路原理及MATLAB详解 【多元域除法】多项式除法电路原理及MATLAB详解 RS码编码原理 RS码的编码与BCH码类似,区别在于RS码为多进制的 生成多项式…

【RS码2】RS码的BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数【全部代码需私信另外付费获取】)

理论基础 订阅《信道编码》专栏,首先查阅各子程序的详解 【有限域生成】本原多项式生成有限域的原理及MATLAB实现 【有限域除法】二元多项式除法电路原理及MATLAB详解 【有限域元素加法和乘法】有限域元素加法和乘法的原理及MATLAB实现 【多元域乘法】多项式乘法电路原理…

QT开发基础

QT中可以使用qmake来生成Makefile&#xff0c;由.pro文件生成Makefile的命令如下&#xff1a; qmake hello.pro -o Makefile make模板(TEMPLATE) 模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择&#xff1a; app - 建立一个应用程序的makefile。这…

Shebang来Java了吗?

尽管添加对Unix风格的shebang &#xff08; #! &#xff09;的支持从来不是 JEP 330 [“启动单文件源代码程序”] 的中心目标 &#xff0c;但围绕JEP 330“单个文件源程序”的潜在功能存在一些问题。为了支持Unix风格的shebang &#xff0c;在OpenJDK jdk-dev邮件列表上引起了广…

【C++编程题1】数组指针之字符串排序

题目 用数组指针处理50个不等长字符串。写一个函数对字符串按降序排序&#xff0c;然后在主函数输入这50个字符串&#xff0c;调用函数后&#xff0c;再输出这50个已经排好序的字符串。 代码 子函数&#xff1a; #include <iostream> using namespace std; #define N…

如何用Java编写类似C的Sizeof函数

如果您刚开始学习Java并且是C语言背景&#xff0c;那么您可能已经注意到Java和C编程语言之间存在一些差异&#xff0c;例如String是Java中的对象&#xff0c;而不是NULL终止的字符数组。 同样&#xff0c;Java中没有sizeof&#xff08;&#xff09;运算符。 所有原始值都有预定…

【C++编程题2】字符串插入空格

题目 从键盘输入一个字符串&#xff0c;然后按照下面要求输出 从键盘输入一个字符串&#xff0c;然后按照下面要求输出一个新字符串&#xff1a;新串是在原串中的每两个字符之间插入一个空格&#xff0c;如原串为 abcd&#xff0c;则新串为a口b口c口d口&#xff08;口表示空格…

Spring启动教程

1.简介 如果您一直想使用一个Web框架&#xff0c;它使您能够快速开始API开发&#xff0c;而无须设置Web服务器&#xff0c;收集所有有线依赖项&#xff0c;安装各种工具的麻烦&#xff0c;那么您将拥有一个出色的框架&#xff0c;即Spring开机 Spring Boot的主要座右铭是约定优…

【LDPC系列1】基于MATLAB中LDPC编译码器对象的图像传输通信系统仿真

关注公号【逆向通信猿】更精彩!!! 1. 构造编码器对象 采用MATLAB内置的comm.LDPCEncoder构造编码器对象,其中使用默认的校验矩阵,信息位长32400比特,码长64800比特,该校验矩阵中除第一行中1的个数为6个外,其余行中1的个数均为7;前12960列中1的个数为8,后32400列构成…

【LDPC系列2】基于MATLAB中LDPC编译码器对象的图像传输通信系统仿真(IEEE 802.16e标准协议基础矩阵)

关注公号【逆向通信猿】更精彩!!! 1. 构造校验矩阵H,并保存为mat文件 采用IEEE 802.16e标准协议中的基础校验矩阵 通过构造QC-LDPC校验矩阵,码长n=2304,信息长k=1152,码率r=1/2,基础矩阵维数为1224: Hb = [-1 94 73 -1

.xhr长轮询_使用Spring 3.2的DeferredResult进行长轮询

.xhr长轮询在我们的最后一集中 &#xff0c; Agile Cowboys Inc.的首席执行官刚刚雇用了Java / Spring顾问&#xff0c;方法是为他提供最初为女友购买的保时捷。 这位首席执行官的女友因失去保时捷而感到不安&#xff0c;已将其婚外恋告诉了他的妻子。 他的妻子在分拆了CEO的套…

十进制数与八进制数互相转换(MATLAB和C版本)

一、八进制数转十进制数 C语言实现 实现思路和参数: /* Function: ConvertOctaltoDecimal* Abstract: Convert an octal number to its equivalent decimal value** - First compute the number of digits in the octal number* - Then perform the conversion, one …

Java正成为COBOL的一部分-它将成为COBOL的一部分吗?

任何从大学&#xff0c;技术学校或社区学院毕业的计算机科学专业都接受过培训。 每个身材高大的公司都使用该语言&#xff0c;并拥有一批具备此能力的程序员。 通用语言可以推动业务发展。 1985年是COBOL。今天是Java。 尽管存在差异&#xff0c;但这两种语言在行为轨迹上都具…

VS2010附加进程调试DLL时断点无法断下的解决方法

系统版本&#xff1a;Win10 x64 1809 VS版本&#xff1a;VS2017 企业版 问题一 在动态链接库(DLL)附加到进程调试时&#xff0c;用VS2017附加后单步调试&#xff0c;结果发现总是在调试过程中卡死&#xff0c;VS2017无响应&#xff1b; 解决办法是&#xff1a;强制结束VS2017…

MATLAB库函数polly2trellis(卷积码生成多项式转网格图描述)的实现过程详解

关注公号【逆向通信猿】更精彩!!! 生成多项式转网格图 在MATLAB中,卷积码的维特比(Viterbi)译码实现通常需要先将生成多项式转换成网格图描述,然后才能利用网格图进行维特比译码 生成多项式转网格图描述的built-in函数为poly2trellis,在MATLAB中,改函数为通信工具箱…

java反射api研究_深入研究Java 8中的可选类API

java反射api研究作为Java程序员&#xff0c;我们所有人都经历了以下情况&#xff1a;我们调用一个方法来获取某个值&#xff0c;然后代替直接对返回值调用某些方法&#xff0c;我们首先必须检查返回值是否不为null&#xff0c;然后在返回值。 这是像Guava这样的外部API试图解决…

【卷积码系列1】(n,k,m)卷积码的编码原理详解及MATLAB实现

关注公号【逆向通信猿】更精彩!!! 原理 编码电路图 ( n , k , m ) (n,k,m) (n,k,

用于SaaS和NoSQL的Jdbi

一个自然的接口&#xff0c;用于与CRM&#xff0c;ERP&#xff0c;会计&#xff0c;营销自动化&#xff0c;NoSQL&#xff0c;平面文件等基于Java的数据集成 Jdbi是Java的SQL便利库&#xff0c;它为JDBC提供更自然的Java数据库接口&#xff0c;该接口易于绑定到域数据类型。 该…

【卷积码系列2】(n,k,m)卷积码的生成多项式矩阵系数转网格图描述(不使用MATLAB库函数)

关注公号【逆向通信猿】更精彩!!! 回顾 之前关于(3,1,3)卷积码的维特比译码仿真写过一篇文章(基于C语言实现): 卷积码Viterbi译码算法基本原理及C语言实现 文中从概率的角度出发,对卷积码的基于硬判决和软判决维特比译码原理进行了阐述,最后以(3,1,3)系统卷积码为例…