mirror of
https://github.com/certd/certd.git
synced 2026-04-03 14:10:54 +08:00
perf: 421 支持3次重试
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -30,4 +30,5 @@ test/**/*.js
|
|||||||
/packages/ui/certd-server/data/keys.yaml
|
/packages/ui/certd-server/data/keys.yaml
|
||||||
/packages/pro/
|
/packages/pro/
|
||||||
test.js
|
test.js
|
||||||
.history
|
.history
|
||||||
|
/logs
|
||||||
@@ -7,7 +7,7 @@ import * as https from "node:https";
|
|||||||
import { merge } from "lodash-es";
|
import { merge } from "lodash-es";
|
||||||
import { safePromise } from "./util.promise.js";
|
import { safePromise } from "./util.promise.js";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
|
import sleep from "./util.sleep.js";
|
||||||
const errorMap: Record<string, string> = {
|
const errorMap: Record<string, string> = {
|
||||||
"ssl3_get_record:wrong version number": "http协议错误,服务端要求http协议,请检查是否使用了https请求",
|
"ssl3_get_record:wrong version number": "http协议错误,服务端要求http协议,请检查是否使用了https请求",
|
||||||
"getaddrinfo EAI_AGAIN": "无法解析域名,请检查网络连接或dns配置,更换docker-compose.yaml中dns配置",
|
"getaddrinfo EAI_AGAIN": "无法解析域名,请检查网络连接或dns配置,更换docker-compose.yaml中dns配置",
|
||||||
@@ -148,6 +148,16 @@ export function createAxiosService({ logger }: { logger: ILogger }) {
|
|||||||
// });
|
// });
|
||||||
// config.httpsAgent = agent;
|
// config.httpsAgent = agent;
|
||||||
config.proxy = false; //必须 否则还会走一层代理,
|
config.proxy = false; //必须 否则还会走一层代理,
|
||||||
|
|
||||||
|
config.retry = merge(
|
||||||
|
{
|
||||||
|
status: [421],
|
||||||
|
count: 0,
|
||||||
|
max: 3,
|
||||||
|
delay: 1000,
|
||||||
|
},
|
||||||
|
config.retry
|
||||||
|
);
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
(error: Error) => {
|
(error: Error) => {
|
||||||
@@ -175,7 +185,7 @@ export function createAxiosService({ logger }: { logger: ILogger }) {
|
|||||||
}
|
}
|
||||||
return response.data;
|
return response.data;
|
||||||
},
|
},
|
||||||
(error: any) => {
|
async (error: any) => {
|
||||||
const status = error.response?.status;
|
const status = error.response?.status;
|
||||||
let message = "";
|
let message = "";
|
||||||
switch (status) {
|
switch (status) {
|
||||||
@@ -215,6 +225,9 @@ export function createAxiosService({ logger }: { logger: ILogger }) {
|
|||||||
case 302:
|
case 302:
|
||||||
//重定向
|
//重定向
|
||||||
return Promise.resolve(error.response);
|
return Promise.resolve(error.response);
|
||||||
|
case 421:
|
||||||
|
message = "源站请求超时";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -256,6 +269,22 @@ export function createAxiosService({ logger }: { logger: ILogger }) {
|
|||||||
if (error instanceof AggregateError) {
|
if (error instanceof AggregateError) {
|
||||||
logger.error("AggregateError", error);
|
logger.error("AggregateError", error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const originalRequest = error.config || {};
|
||||||
|
logger.info(`config`, originalRequest);
|
||||||
|
const retry = originalRequest.retry || {};
|
||||||
|
if (retry.status && retry.status.includes(status)) {
|
||||||
|
if (retry.max > 0 && retry.count < retry.max) {
|
||||||
|
// 重试次数增加
|
||||||
|
retry.count++;
|
||||||
|
const delay = retry.delay * retry.count;
|
||||||
|
logger.error(`status=${status},重试次数${retry.count},将在${delay}ms后重试,请求地址:${originalRequest.url}`);
|
||||||
|
await sleep(delay);
|
||||||
|
return service.request(originalRequest); // 重试请求
|
||||||
|
}
|
||||||
|
logger.error(`重试超过最大次数${retry.max},请求失败:${originalRequest.url}`);
|
||||||
|
}
|
||||||
|
|
||||||
const err = new HttpError(error);
|
const err = new HttpError(error);
|
||||||
if (error.response?.config?.logParams === false) {
|
if (error.response?.config?.logParams === false) {
|
||||||
delete err.request?.params;
|
delete err.request?.params;
|
||||||
|
|||||||
@@ -13,6 +13,19 @@
|
|||||||
|
|
||||||
// await testLocker();
|
// await testLocker();
|
||||||
|
|
||||||
import { domainUtils } from "./dist/utils/util.domain.js";
|
// import { domainUtils } from "./dist/utils/util.domain.js";
|
||||||
|
|
||||||
console.log(domainUtils.isIpv6("::0:0:0:FFFF:129.144.52.38"));
|
// console.log(domainUtils.isIpv6("::0:0:0:FFFF:129.144.52.38"));
|
||||||
|
|
||||||
|
// import { http } from "./dist/utils/util.request.js";
|
||||||
|
|
||||||
|
// http
|
||||||
|
// .request({
|
||||||
|
// url: "https://www.baidu.com/234234/3333",
|
||||||
|
// retry: {
|
||||||
|
// status: [404],
|
||||||
|
// },
|
||||||
|
// })
|
||||||
|
// .then(res => {
|
||||||
|
// console.log(res.data);
|
||||||
|
// });
|
||||||
|
|||||||
Reference in New Issue
Block a user