Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
jiwei-api
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
马天浩
jiwei-api
Commits
37ae5c79
Commit
37ae5c79
authored
Jan 19, 2021
by
matianhao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[瑞成接口] <fix> 注释重试机制和秘钥过期时间判断
parent
0fcc0c3c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
34 deletions
+31
-34
RequestSecretSchedulerTask.java
...h/requestsecret/scheduler/RequestSecretSchedulerTask.java
+4
-4
RestTemplateService.java
...va/com/mth/requestsecret/service/RestTemplateService.java
+27
-30
No files found.
src/main/java/com/mth/requestsecret/scheduler/RequestSecretSchedulerTask.java
View file @
37ae5c79
...
...
@@ -71,7 +71,7 @@ public class RequestSecretSchedulerTask implements SchedulingConfigurer {
triggerContext
->
{
getRequestSecret
();
// 提前一分钟刷新
Instant
instant
=
Instant
.
ofEpochMilli
(
requestSecretEndTime
).
minus
(
1
,
ChronoUnit
.
MINUTES
);
Instant
instant
=
Instant
.
ofEpochMilli
(
requestSecretEndTime
).
minus
(
5
,
ChronoUnit
.
MINUTES
);
return
Date
.
from
(
instant
);
}
);
...
...
@@ -105,11 +105,11 @@ public class RequestSecretSchedulerTask implements SchedulingConfigurer {
requestSecretEndTime
=
Long
.
parseLong
(
datas
.
getString
(
"requestSecretEndTime"
));
refreshSecret
=
datas
.
getString
(
"refreshSecret"
);
refreshSecretEndTime
=
Long
.
parseLong
(
datas
.
getString
(
"refreshSecretEndTime"
));
// 设置过期时间,30秒内不重新刷新秘钥
String
expireTime
=
String
.
valueOf
(
requestSecretEndTime
-
(
14
*
60
*
1000
+
30
*
1000
));
//
//
设置过期时间,30秒内不重新刷新秘钥
//
String expireTime = String.valueOf(requestSecretEndTime - (14 * 60 * 1000 + 30 * 1000));
// redis保存 请求秘钥 和 过期时间
redisUtil
.
set
(
Constants
.
SJJ_REQUEST_SECRET_PREFIX
,
requestSecret
);
redisUtil
.
set
(
Constants
.
SJJ_REQUEST_EXPIRE_TIME_PREFIX
,
expireTime
);
//
redisUtil.set(Constants.SJJ_REQUEST_EXPIRE_TIME_PREFIX, expireTime);
}
}
...
...
src/main/java/com/mth/requestsecret/service/RestTemplateService.java
View file @
37ae5c79
...
...
@@ -13,14 +13,11 @@ import org.springframework.util.LinkedMultiValueMap;
import
org.springframework.util.MultiValueMap
;
import
org.springframework.web.client.RestTemplate
;
import
java.time.Instant
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.util.Date
;
import
java.util.Map
;
import
java.util.Objects
;
import
static
com
.
mth
.
requestsecret
.
constant
.
Constants
.
*
;
import
static
com
.
mth
.
requestsecret
.
constant
.
Constants
.
SJJ_REQUEST_SECRET_PREFIX
;
/**
* @author fyl
...
...
@@ -111,32 +108,32 @@ public class RestTemplateService {
ResponseEntity
<
String
>
responseEntity
=
restTemplate
.
exchange
(
url
.
toString
(),
HttpMethod
.
POST
,
request
,
String
.
class
);
log
.
info
(
"api response:{}"
,
responseEntity
);
try
{
// 接口返回码
String
code
=
JSONObject
.
parseObject
(
responseEntity
.
getBody
()).
getString
(
"code"
);
Integer
count
=
threadLocal
.
get
();
String
threadName
=
Thread
.
currentThread
().
getName
();
// 如非成功返回码,则重新获取秘钥并发送请求,限制重新请求次数
if
(!
RESPONSE_CODE_00
.
equals
(
code
)
&&
count
<
REQUEST_LIMIT
)
{
threadLocal
.
set
(++
count
);
log
.
info
(
"线程名称:{},重新请求次数:{}"
,
threadName
,
count
);
// redis 中获取过期时间
String
expireTimeStr
=
redisUtil
.
get
(
SJJ_REQUEST_EXPIRE_TIME_PREFIX
);
LocalDateTime
expireTime
=
Instant
.
ofEpochMilli
(
Long
.
parseLong
(
expireTimeStr
)).
atZone
(
ZoneOffset
.
ofHours
(
8
)).
toLocalDateTime
();
LocalDateTime
now
=
LocalDateTime
.
now
();
// 当前时间超过过期时间,重新请求秘钥,否则重新发送请求
if
(
now
.
isAfter
(
expireTime
))
{
log
.
info
(
"redis中过期时间:{},当前时间:{}"
,
expireTime
,
now
);
// 重新获取秘钥
schedulerTask
.
getRequestSecret
();
}
// 重新调用请求
return
commonSendRequest
(
paramMap
,
apiMethod
);
}
}
finally
{
threadLocal
.
remove
();
}
//
try {
//
// 接口返回码
//
String code = JSONObject.parseObject(responseEntity.getBody()).getString("code");
//
Integer count = threadLocal.get();
//
String threadName = Thread.currentThread().getName();
//
//
// 如非成功返回码,则重新获取秘钥并发送请求,限制重新请求次数
//
if (!RESPONSE_CODE_00.equals(code) && count < REQUEST_LIMIT) {
//
threadLocal.set(++count);
//
log.info("线程名称:{},重新请求次数:{}", threadName, count);
//
// redis 中获取过期时间
//
String expireTimeStr = redisUtil.get(SJJ_REQUEST_EXPIRE_TIME_PREFIX);
//
LocalDateTime expireTime = Instant.ofEpochMilli(Long.parseLong(expireTimeStr)).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
//
LocalDateTime now = LocalDateTime.now();
//
// 当前时间超过过期时间,重新请求秘钥,否则重新发送请求
//
if (now.isAfter(expireTime)) {
//
log.info("redis中过期时间:{},当前时间:{}", expireTime, now);
//
// 重新获取秘钥
//
schedulerTask.getRequestSecret();
//
}
//
// 重新调用请求
//
return commonSendRequest(paramMap, apiMethod);
//
}
//
} finally {
//
threadLocal.remove();
//
}
return
responseEntity
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment