本平台对接某某平台的接口,保证接口的稳定性和安全性
实战:
首先我们初始化一个Demo,SpringBoot初始化教程略,初始化后的效果如下:
1.引入依赖
这里我们使用 commons-httpclient 3
2.编写工具类(HttpClientUtils):
根据需求,这里我们需要两个参数,一个是token,一个是url参数 + url地址,权限验证采用的是Bearer Token
Post请求:
根据需求,这里我们需要三个参数,一个是token,一个是url参数 + url地址,还有一个是请求体,权限验证采用的是Bearer Token
Main方法测试:
获得的请求结果:
我们请求得到JSON字符串后,使用GSON来解析JSON,提取有用的信息,如token
获取得到token后我们开始使用,模拟一次Get请求:
完整工具类,方便大家拿来直接使用:
HttpClientUtils.java
为前端提供接口并测试:
首先我们统一返回风格:
Result.java
新建ApiController:
首先我们将公共变量做一个提取:
模拟Get请求:
模拟Post请求:
整体代码:
优化:
模拟场景:在尽可能的不破坏源代码的情况下,不喜勿喷
优化一:属性通过配置文件读取
新建application.yml文件
新建配置文件读取类:
ApiConfig.java
ApiController进行微调:
由于Token会存在过期时间,所以我们这里引用Redis
引入依赖:
在application.yml添加redis配置:
注入RedisTemplate,并优化
进一步优化
场景:如果有大量请求同时访问一个正好过期的缓存数据,可能会出现缓存击穿,所以我们的解决方案是添加分布式锁
加入依赖:
创建RedissionConfig.java 配置RedissionClient
注入并编写读锁、写锁:
再次优化:
互联网系统经常会遇到高并发大流量的请求,在突发情况下(如秒杀、抢购),瞬间大流量会直接把系统打垮,为了防止出现这种情况最常见的解决方案之一就是限流,当请求达到一定的并发数或速率,就进行等待、排队、降级、拒绝服务等。
基于Guava工具类【令牌桶算法】,借助自定义注解+AOP实现接口限流
令牌桶算法的原理也比较简单:系统会维护一个令牌(token)桶,以一个恒定的速度往桶里放入令牌(token),这时如果有请求进来想要被处理,则需要先从桶里获取一个令牌(token),当桶里没有令牌(token)可取时,则该请求将被拒绝服务。令牌桶算法通过控制桶的容量、发放令牌的速率,来达到对请求的限制。
单机模式模拟:
添加依赖:
自定义限流注解:
Limit.java
使用AOP切面拦截限流注解
给需要限流的接口加上注解
多次请求时:
领取专属 10元无门槛券
私享最新 技术干货