java接口动态限流,java轻量级接口限流/防刷插件

文章目录

简介

maven坐标

用法

效果

简介

call-limit提供接口限流、防刷的功能,插件基于spring开发,在应用应用的任何一个逻辑层皆可使用(web、service、dao),插件支持单机应用下的限流和分布式应用的限流(分布式应用限流需要依赖redis),在简单业务场景下插件可为大家提供轻量无代码逻辑侵入的限流、防刷的支持。

GitHub: https://github.com/xiemingmin/call-limit

maven坐标

top.xiemingmin

call-limit

1.0.1-SNAPSHOT

目前SNAPSHOT版本只能发布到第三方仓库,如需使用请在maven配置中增加第三方repository

sonatype-nexus-snapshots

Sonatype Nexus Snapshots

https://oss.sonatype.org/content/repositories/snapshots/

用法

在项目中添加插件maven依赖

在spring xml配置中配置相关的bean

单机场景:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:mm="http://www.xiemingmin.top/schema/mm"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.xiemingmin.top/schema/mm

http://www.xiemingmin.top/schema/mm.xsd">

beans>

分布式场景:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:mm="http://www.xiemingmin.top/schema/mm"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.xiemingmin.top/schema/mm

http://www.xiemingmin.top/schema/mm.xsd">

bean>

bean>

beans>

3.实现用户信息接口(top.xiemingmin.call.limit.intf.UserInfoSupport)

返回每个请求线程的用户唯一标识,可使用请求的客户端ip,插件中会调用次接口判断是否同一用户的请求。

ps:可将用户信息放入ThreadLocal在此方法中直接取值

package com.xiemingmin.service;

import org.springframework.stereotype.Service;

import top.xiemingmin.call.limit.intf.UserInfoSupport;

@Service

public class UserInfoServiceImpl implements UserInfoSupport {

@Override

public String currentUserKey() {

return LoginContext.getUserId();

}

}

4.在需要限流或防刷的方法上添加top.xiemingmin.call.limit.annotation.CallLimit注解

参数说明:

time:单位时间内值允许调用1次

timeUnit:时间单位

onLimitException: 触发限流抛出的异常

如下配置表示30秒内值允许调用一次

@GetMapping("/getPerson/{name}")

@CallLimit(time = 30, timeUnit = TimeUnit.SECONDS)

public Result> getPerson(@PathVariable String name){

return personService.findPersonByName(name);

}

效果

第一次调用(成功)

57efe854fef381baf7b0ff227ddd05b1.png

第二次调用(被限制)

f0fa9fa0331cd746bd316b589cfca0a7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值