Predicate
Predicate
Predicate 是 java 8 提供的一个函数式接口,它允许接收一个参数并返回一个布尔值,可以用于条件过滤,请求 cas 的校验。
指定时间规则匹配路由
请求在指定日期之前 对应 BeforeRoutePredicateFactory
请求在指定日期之后 对应 AfterRoutePredicateFactory
请求在指定的两个日期之间 对应 BetweenRoutePredicateFactory
Cookie 匹配路由
对应 CookieRoutePredicateFactory
当前请求需要携带一个 name=chocolate value 为 xpp 才能路由到https://example.org
Header 匹配路由
对应 HeaderRoutePredicateFactory,判断请求中 Header 头消息对应的 name 和 value 与 Predicate 配置的值是否匹配,value 也是正则匹配形式
请求中 Header 头的 name=X-Request-Id value 根据正则表达式匹配\d+ ,也就是匹配 1 个以上的数字。
Host 匹配路由
HTTP 请求会携带一个 Host 字段,这个字段表示请求的服务器地址,对应 HostRoutePredicateFactory
host 可以配置一个列表,列表中的每个元素通过逗号分隔。当前请求中的 host 的值符合**.somehost.org
, **.anotherhost.org
时候,才会路由到https://example.org
请求方法匹配路由
对应 MethodRoutePredicateFactory 根据 HTTP 请求的 Method 属性来匹配以实现路由
如果请求的方式为 GET 或 POST 请求,会路由到https://example.org
请求路径匹配路由
对应 PathRoutePredicateFactory
{segment}为特殊的占位符,/*
表示单层路径匹配,/**
表示多层路径匹配。匹配请求的 URI 为/red/* ,/blue/* 时,才会转发到https://example.org
总结一下,我们这篇文章主要讲了 gateway 的谓词部分,谓词是 java8 进入的函数式接口,提供断言功能。可以匹配 HTTP 请求中的任何内容。如果 Predicate 集合判断结果为 true,则意味着请求会被当前 Router 进行转发。
然后谓词的类型大概有按照指定时间规则匹配路由,按照 Cookie 匹配路由,按照 Header 匹配路由,按照 Host 匹配路由,按照请求方法匹配路由等待。
我们在合适的场合使用合适的谓词路由规则,简化我们的代码开发,让 gateway 网关真正起到路由转发的作用,gateway 网关的本质是对请求进行路由转发以及对请求前置和后置的过滤,在下篇文章中我们会对过滤器这一部分的内容进行讲解,如果这篇文章对你有帮助的话,不要忘了给我点赞留言哦,嘿嘿,您的赞和评论是对我大力的支持,我们一起学习好 gateway 网关,以便在工作中能够灵活运用,让 gateway 网关真正发挥它的作用。
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/492a8b860a57dc9bd48ccd55f】。文章转载请联系作者。
评论