测试网关限流

This commit is contained in:
2026-03-02 19:17:34 +08:00
parent a2a8547bca
commit 5fb6350763

View File

@@ -1,13 +1,78 @@
package cn.mayiming;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
// 网关地址(请根据你的实际环境修改)
private static final String GATEWAY_URL = "http://localhost:8080/order";
// 请求体JSON数据
private static final String REQUEST_BODY = "{\"username\":\"admin\"}";
// 总请求次数
private static final int TOTAL_REQUESTS = 30;
public static void main(String[] args) {
// 1. 创建HttpClient实例设置超时时间10秒
HttpClient httpClient = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.executor(Executors.newFixedThreadPool(5)) // 线程池,控制并发数
.build();
// 2. 循环发送30次请求
for (int i = 1; i <= TOTAL_REQUESTS; i++) {
int requestNum = i; // 内部类引用需要final所以定义临时变量
try {
// 构建POST请求
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(GATEWAY_URL))
.header("Content-Type", "application/json") // 指定JSON格式
.POST(HttpRequest.BodyPublishers.ofString(REQUEST_BODY))
.timeout(Duration.ofSeconds(10))
.build();
// 发送请求并获取响应
HttpResponse<String> response = httpClient.send(
request,
HttpResponse.BodyHandlers.ofString()
);
// 3. 解析响应结果,判断是否成功
int statusCode = response.statusCode();
boolean isSuccess = statusCode >= 200 && statusCode < 300;
// 打印请求结果
System.out.printf("第 %d 次请求:%s | 状态码:%d | 响应体:%s%n",
requestNum,
isSuccess ? "成功" : "失败",
statusCode,
response.body().length() > 200 ? response.body().substring(0, 200) + "..." : response.body()
);
// 可选:每次请求后短暂休眠,避免压垮网关(可根据需要调整)
TimeUnit.MILLISECONDS.sleep(100);
} catch (Exception e) {
// 捕获所有异常,标记请求失败
System.out.printf("第 %d 次请求:失败 | 异常信息:%s%n",
requestNum,
e.getMessage()
);
}
}
// 4. 关闭线程池,释放资源
((ExecutorService) httpClient.executor().get()).shutdown();
System.out.println("\n===== 30次请求发送完成 =====");
}
}