下面是一个简单的Spring Cloud Gateway应用,包括路由配置、过滤器、监控等功能。该应用将请求转发到http://httpbin.org目标地址,并添加了Hystrix和RateLimiter过滤器,使用Prometheus和Grafana进行监控。
【资料图】
@SpringBootApplicationpublic class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/get") .filters(f -> f.hystrix(config -> config.setName("hystrixFilter"))) .uri("http://httpbin.org")) .route(r -> r.path("/delay/**") .filters(f -> f.requestRateLimiter(config -> config.setKeyResolver(new RemoteAddrKeyResolver())) .hystrix(config -> config.setName("hystrixFilter"))) .uri("http://httpbin.org")) .build(); }}
在上面的代码中,使用@Bean注解定义了一个RouteLocator类型的bean,用于配置路由信息。使用RouteLocatorBuilder的routes()方法来定义路由规则,使用path()方法定义匹配规则,使用filters()方法添加过滤器,使用uri()方法定义目标地址。
在上面的代码中,第一个路由规则将请求路径为/get的请求转发到http://httpbin.org目标地址,并添加了名为"hystrixFilter"的Hystrix过滤器。第二个路由规则将请求路径为/delay/**的请求转发到http://httpbin.org目标地址,并添加了名为"hystrixFilter"和"rateLimiterFilter"的Hystrix和RateLimiter过滤器,其中RateLimiter过滤器使用RemoteAddrKeyResolver作为KeyResolver,用于限制相同IP地址的请求频率。
下面是Hystrix和RateLimiter过滤器的配置:
@Configurationpublic class FilterConfig { @Bean public HystrixGatewayFilterFactory hystrixGatewayFilterFactory() { return new HystrixGatewayFilterFactory(); } @Bean public RequestRateLimiterGatewayFilterFactory rateLimiterGatewayFilterFactory() { return new RequestRateLimiterGatewayFilterFactory(); }}
在上面的代码中,使用@Configuration注解定义了一个配置类,用于配置Hystrix和RateLimiter过滤器。使用@Bean注解定义了hystrixGatewayFilterFactory()和rateLimiterGatewayFilterFactory()方法,分别返回HystrixGatewayFilterFactory和RequestRateLimiterGatewayFilterFactory类型的bean,用于创建Hystrix和RateLimiter过滤器。
下面是Prometheus和Grafana的监控配置:
@Configurationpublic class MonitoringConfig { @Bean MeterRegistryCustomizer commonTags() { return registry -> registry.config() .commonTags("application", "gateway"); } @Bean PrometheusMeterRegistry prometheusMeterRegistry() { return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); } @Bean public MeterFilter renameStatusCodeTag() { return MeterFilter.renameTag("status", "http_status"); } @Bean public MeterFilter renameUriTag() { return MeterFilter.renameTag("uri", "request_uri"); } @Bean public GatewayMetrics gatewayMetrics(RouteLocator routeLocator, PrometheusMeterRegistry meterRegistry) { return new GatewayMetrics(routeLocator, meterRegistry, Arrays.asList( new DefaultRouteIdProvider(), new StaticRouteIdProvider("get_route", "/get"), new StaticRouteIdProvider("delay_route", "/delay/**") )); }}
在上面的代码中,使用@Configuration注解定义了一个配置类,用于配置Prometheus和Grafana的监控。使用@Bean注解定义了commonTags()方法,用于设置公共标签,application为gateway。使用@Bean注解定义了prometheusMeterRegistry()方法,返回PrometheusMeterRegistry类型的bean,用于创建PrometheusMeterRegistry实例。使用@Bean注解定义了renameStatusCodeTag()和renameUriTag()方法,分别返回MeterFilter类型的bean,用于重命名标签。使用@Bean注解定义了gatewayMetrics()方法,返回GatewayMetrics类型的bean,用于创建GatewayMetrics实例,并设置路由规则和MeterRegistry。
下面是GatewayMetrics的代码:
public class GatewayMetrics extends RouteMatchingMeterFilter { public GatewayMetrics(RouteLocator routeLocator, MeterRegistry meterRegistry, List routeIdProviders) { super(routeLocator, "gateway.requests", meterRegistry, routeIdProviders); } @Override protected Iterable tags(Route route, URI uri) { return Tags.of(super.tags(route, uri), Tag.of("method", "unknown"), Tag.of("status", "unknown"), Tag.of("request_uri", uri.getPath())); } @Override protected Iterable extraTags(HttpServletRequest request) { return Tags.of("method", request.getMethod()); } @Override protected String tagValue(HttpServletRequest request, String key) { if (key.equals("status")) { Object status = request.getAttribute(ServerWebExchangeUtils.STATUS_CODE_ATTRIBUTE); if (status != null) { return status.toString(); } } return super.tagValue(request, key); }}
在上面的代码中,使用GatewayMetrics继承了RouteMatchingMeterFilter类,用于创建路由规则和MeterRegistry之间的映射关系。在tags()方法中,添加了method、status和request_uri标签。在extraTags()方法中,添加了method标签。在tagValue()方法中,根据ServerWebExchangeUtils.STATUS_CODE_ATTRIBUTE获取status标签的值。
最后,使用Prometheus和Grafana进行监控时,需要添加以下依赖:
io.micrometer micrometer-core io.micrometer micrometer-registry-prometheus
在使用Prometheus和Grafana进行监控之前,需要启动Prometheus服务器,并将Spring Cloud Gateway的监控数据暴露给Prometheus服务器。可以在application.yml文件中添加以下配置:
management: endpoints: web: exposure: include: prometheus endpoint: prometheus: enabled: true
这里,使用management.endpoints.web.exposure.include属性设置将/prometheus端点暴露给外部访问,使用management.endpoint.prometheus.enabled属性设置Prometheus监控启用。当应用程序启动时,Prometheus服务器将开始收集和显示应用程序的监控数据。可以使用Grafana可视化监控数据,例如显示请求响应时间、请求数量等。具体的操作可以参考Grafana的官方文档。
标签:
精彩推荐
下面是一个简单的SpringCloudGateway应用,包括路由配置、过滤器、监控等功能。该应用将请求转发到http:...
北京明星广告代言自律公约新浪娱乐讯13日,“明星代言新业态规范发展研讨暨《北京明星广告代言活动自律...
郭展宏是上海震旦办公自动化销售有限公司事业部主管,2022年1月被公司外派到江苏南京,负责无锡、镇江、...
近日,一个光伏企业发布关于控股子公司收到《入围通知书》的公告,中标金额约50亿元人民币,约为其在2022年...
不可以。对于迫切想要进入白银市场的投资者而言,纸白银可以说是最易参与的白银投资品种之一,资金需求...
南非总统拉马福萨说,政府制定了新的吸引投资目标,即在2023年至2028年,吸引2万亿兰特(1兰特约合0 05...
1、冰爪,冬季登山或者高海拔登山必备的器械。2、用来在很滑的冰面或者雪地上站稳脚跟。3、从固定方式上...
原标题:返投比例最低1:1河南政府投资基金如何实现“四两拨千斤”作为政策创新工具,近年来政府投资基金...
目前国内生态环保产业的分布与经济发展空间分布呈现较高的吻合度,形成“一带一轴”分布特征,呈现南比...
打击冒牌消防培训和制售假冒伪劣消防产品,青浦消防开展专项整治行动
排名19!合肥上榜公积金存额度全国20强!,合肥,广州,北京,公积金,20强
中国最舒适的城市其实是成都,到成都必做6件事,每一件都爽歪歪
IT之家4月14日消息,根据此前消息,小米将在4月18日晚7点召开小米“携光同行”新品发布会,届时将发布小...
1、手机一直处于通话中有以下几种原因:所拨打的号码正在通话;2、所拨打的号码如果为座机则话筒未放好...
国家电投5 65GW光伏组件定标:协鑫、一道、天合、晶科、英利、亿晶、华耀、赛拉弗、瑞晶、红太阳等18企...
值此春暖花开之际,热忱欢迎各位专家、代表来到“水通南国三千里,气压江城十四州”的江南小邹鲁金华市...
湘西州引导企业数字化转型一季度新建5G基站528个,推动900多家企业上云华声在线4月13日讯(全媒体记者李...
别人送我东西感谢(别人送我生日礼物感谢的步骤)你好,谢谢你的礼物是什么。你可以送他什么,他需要什么...
中原建业(09982)发布公告,于2022年12月1日,公司(透过其全资附属公司中
汽车现在已经越来越普及,基本上都快实现每家每户都有汽车了,那么汽车这么多的情况之下,我们在用车的...
资讯News
08-17
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
聚焦Policy
当好农民工的“护薪人” 近日,罗某等7名农民工在收到被拖欠的工资后,纷纷打电话向江西省南昌市...
“通讯录里所有人都知道我欠钱了” □ 本报记者 韩丹东 □ 本报见习记者 张守坤 ...
大连宝马车撞人案肇事司机被判死刑 本报讯 记者韩宇 10月29日,辽宁省大连市中级人民法院一审...
医院财务迷上网络赌博输光5000万元公款 □ 本报记者 马维博 □ 本报通讯员 汪宇堂 曹...
辊环车削 雕琢毫厘(工匠绝活) 【绝活看点】 23年来,雷虎始终扎根一线,改进钢材轧制工艺...
交警严查超标电动自行车挪用“白牌” 截至昨晚6时,处罚电动自行车违法行为共计6585笔;下一步将...
明起寒潮来袭 北方气温普降10℃以上 中央气象台预计,本周日北京平原地区最低气温降至-4℃左右...
多种蔬菜价格降幅达五成 包括菠菜、蒿子秆等 预计本月中旬蔬菜恢复供需平衡 本报讯(记者...
北京周日最低气温或达-4℃ 本报讯(记者 赵婷婷)北京青年报记者昨天从中央气象台获悉,新一股...
昌平一家四口确诊新冠肺炎 天通北苑第二社区升级为中风险地区 朝阳两涉疫校区及16所学校停课 ...