基本思路

参考spring-cloud-zuul-ratelimit开源项目,在过滤器中根据当前的请求路径,判断当前的路由信息,当取得路由信息后,可以对服务的调用次数做统计等操作。

具体实现

创建一个AbstractRouteFilter

public abstract class AbstractRouteFilter extends ZuulFilter {
private final RouteLocator routeLocator;
private final UrlPathHelper urlPathHelper;
AbstractRouteFilter(RouteLocator routeLocator,UrlPathHelper urlPathHelper){
this.routeLocator = routeLocator;
this.urlPathHelper = urlPathHelper;
}
//核心逻辑,获取请求路径,利用RouteLocator返回路由信息
protected Route route(HttpServletRequest request){
String requestURI = urlPathHelper.getPathWithinApplication(request);
return routeLocator.getMatchingRoute(requestURI);
}
}

使用时,继承AbstractRouteFilter即可,下面演示一个服务调用次数的过滤器示例

示例

public class RouteTimesFilter extends AbstractRouteFilter {
public RouteTimesFilter(RouteLocator routeLocator, UrlPathHelper urlPathHelper) {
super(routeLocator,urlPathHelper);
}
@Override
public String filterType() {
//可以根据业务要求,修改过滤器类型
return "post";
}
@Override
public int filterOrder() {
//过滤器顺序
return 0;
}
@Override
public boolean shouldFilter() {
//可以根据业务要求,过滤相关路由
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
Route route = route(ctx.getRequest());
//获取到路由信息,就可以做想要做的事了
System.out.println(route);
return null;
}
}

配置过滤器

@Component
public class ZuulFilterConfig {
@Bean
public ZuulFilter routeTimesFilter(RouteLocator routeLocator){
return new RouteTimesFilter(routeLocator,new UrlPathHelper());
}
}

路由到后端的服务节点信息

/**
* 打印目标节点地址
* @param logMap
* @param ctx
*/
private void printTargetUri(Map<String, Object> logMap,RequestContext ctx) {
//打印targetUri
if((Boolean) ctx.get("isSuccess")){
RibbonHttpResponse ribbonHttpResponse = (RibbonHttpResponse)ctx.get("zuulResponse");
URI uri=null;
try {
//反射获取私有成员变量
RibbonApacheHttpResponse ribbonApacheHttpResponse = (RibbonApacheHttpResponse)ReflectionUtils.
getPrivateField(ribbonHttpResponse,"response");
uri = ribbonApacheHttpResponse.getRequestedURI();
logger.info("targetUri:"+uri);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}catch (IllegalAccessException ie){
ie.printStackTrace();
}
}
}

Spring Cloud Zuul 获取当前请求的路由信息和路由后端的服务节点信息的更多相关文章

  1. 服务网关Spring Cloud Zuul

    Spring Cloud Zuul 开发环境 idea 2019.1.2 jdk1.8.0_201 Spring Boot 2.1.9.RELEASE Spring Cloud Greenwich S ...

  2. Spring Cloud Zuul API服务网关之请求路由

    目录 一.Zuul 介绍 二.构建Spring Cloud Zuul网关 构建网关 请求路由 请求过滤 三.路由详解 一.Zuul 介绍 ​ 通过前几篇文章的介绍,我们了解了Spring Cloud ...

  3. Spring Cloud Zuul路由规则动态更新

    背景  Spring Cloud Zuul 作为微服务的网关,请求经过zuul路由到内部的各个service,由于存在着新增/修改/删除服务的路由规则的需求,zuul的路由规则的动态变更功能 提供了 ...

  4. spring cloud: zuul: 微网关-简单使用与路由配置

    spring cloud: zuul: 微网关-简单使用与路由配置 首先引入依赖 <dependency> <groupId>org.springframework.cloud ...

  5. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  6. 笔记:Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

  7. Spring Cloud Zuul 限流详解(附源码)(转)

    在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...

  8. Spring Cloud Zuul 中文文件上传乱码

    原文地址:https://segmentfault.com/a/1190000011650034 1 描述 使用Spring Cloud Zuul进行路由转发时候吗,文件上传会造成中文乱码“?”.1. ...

  9. Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

  10. Spring Cloud(十二):Spring Cloud Zuul 限流详解(附源码)(转)

    前面已经介绍了很多zuul的功能,本篇继续介绍它的另一大功能.在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选 ...

随机推荐

  1. P1962 斐波那契数列(矩阵快速幂)

    #include<bits/stdc++.h> #define int long long using namespace std; int n,a[3],m=1e9+7,c[3][3], ...

  2. TienChin-课程管理-删除课程

    CourseController.java @PreAuthorize("hasPermission('tienchin:course:remove')") @Log(title ...

  3. RestTemplate-postForObject详解、调用Https接口、源码解析,读懂这一篇文章就够了

    restTemplate 目录 restTemplate 1. 基本介绍 2. 常用方法分析及举例 2.1. get请求 2.2. post请求 3. springboot中使用restTemplat ...

  4. C/C++ 反汇编:函数与结构体

    反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高级语言代码都有相当大的帮助, ...

  5. Redis安装,数据类型及常用命令

    安装 - 可以使用yum 安装,要先配置epel源 ``` yum install -y redis ``` - 可以编译安装 ``` wget http://download.redis.io/re ...

  6. 本地Nuget包管理

    nuget.org有时候会抽风,VS无法自动下载程序包.这时,我们可以配置本地nuget包搜索路径. 1 下载Nuget package 以anycad rapid sdk为例,可以先从百度云盘下载最 ...

  7. iOS视频播放常用重点知识

    iOS视频播放常见的重要知识点如下: 视频格式:iOS支持的视频格式主要有H.264.MPEG-4.H.263.Sorenson等.它们根据不同的应用场景进行使用. 视频编解码:视频编解码技术是视频播 ...

  8. 7、后端学习规划:PHP学习 - 学习规划系列文章

    PHP在其阵营中被称为世界上最好的编程语言.笔者在学习了其一些框架后也有一定的经验,当时主要根据其框架进行的开发.对于PHP来说,在编程排行榜上也是有名的存在,现在还有一些网站应用也是用的PHP进行的 ...

  9. 关于React-Router6 (React 路由)

    一.概要 (1)每个单页应用其实是一系列的 JS 文件,当用户请求网站时,网站返回一整个(或一系列)的 js 文件和 HTML,而当用户在某个页面内点击时,你需要告诉浏览器怎么加载另一个页面地址.单页 ...

  10. CF145E Lucky Queries 题解

    题目链接:CF 或者 洛谷 前置知识点:序列操作 本文关键词 约定俗称:因为频繁敲最长不下降子序列 \(LNCS\) 和最长不上升子序列 \(LNIS\) 太麻烦了,下文将 \(000011111\) ...