java后端限流操作

文章目录

背景

一些业务场景中,我使用 java 在后端代码中可能要对某些流程做频率控制,其实会有很多做法,不同的做法适用于不同的场景

guava 限流

一些简单的对某些流程执行的频率控制
比如服务端代码假如要调用某个 open api,这个 api 会有一定的频控,你不想要触发到这个频控

public class ThirdPartyService {

    // 创建一个每秒最多允许 10 次调用的限流器
    private final RateLimiter rateLimiter = RateLimiter.create(10.0);

    public void callThirdPartyAPI() {
        // acquire() 会阻塞直到可以获取到令牌
        rateLimiter.acquire();

        // 执行调用第三方接口的逻辑
        System.out.println("调用第三方接口 - " + System.currentTimeMillis());
    }

    public static void main(String[] args) {
        ThirdPartyService service = new ThirdPartyService();

        for (int i = 0; i < 15; i++) {
            new Thread(() -> {
                service.callThirdPartyAPI();
            }).start();
        }
    }
}

rateLimiter.acquire()能够控制 callThirdPartyAPI 内的执行逻辑是均匀分布在 0.0s、0.1s、0.2s…0.9s, 1.0s, 1.1s…时执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值