测试网关限流
This commit is contained in:
@@ -1,13 +1,78 @@
|
|||||||
package cn.mayiming;
|
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!
|
* Hello world!
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class App
|
public class App
|
||||||
{
|
{
|
||||||
public static void main( String[] args )
|
// 网关地址(请根据你的实际环境修改)
|
||||||
{
|
private static final String GATEWAY_URL = "http://localhost:8080/order";
|
||||||
System.out.println( "Hello World!" );
|
// 请求体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