测试网关限流
This commit is contained in:
@@ -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次请求发送完成 =====");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user