You've already forked FrameTour-BE
添加限流工具,修改模板onlyIf
This commit is contained in:
src/main
java
com
ycwl
basic
constant
mapper
model
pc
ratelimiter
repository
service
task
resources
@ -37,6 +37,7 @@ import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity;
|
||||
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
||||
import com.ycwl.basic.model.task.resp.AddFaceSampleRespVo;
|
||||
import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
|
||||
import com.ycwl.basic.ratelimiter.SlidingWindowRateLimiter;
|
||||
import com.ycwl.basic.repository.FaceRepository;
|
||||
import com.ycwl.basic.service.task.TaskFaceService;
|
||||
import com.ycwl.basic.storage.StorageFactory;
|
||||
@ -86,6 +87,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
private SourceMapper sourceMapper;
|
||||
@Autowired
|
||||
private OrderBiz orderBiz;
|
||||
private SlidingWindowRateLimiter limiter = new SlidingWindowRateLimiter(5); // 阿里云人脸检索限制qps=5
|
||||
|
||||
private IAcsClient getClient() {
|
||||
DefaultProfile profile = DefaultProfile.getProfile(
|
||||
@ -180,7 +182,11 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
record.setIdStr(item.getExtraData());
|
||||
record.setFaceSampleId(Long.parseLong(item.getExtraData()));
|
||||
if (StringUtils.isNumeric(item.getDbName())) {
|
||||
record.setFaceUrl(getFaceSampleUrl(record.getFaceSampleId()));
|
||||
FaceSampleEntity faceSample = faceRepository.getFaceSample(record.getFaceSampleId());
|
||||
if (faceSample != null) {
|
||||
record.setFaceUrl(faceSample.getFaceUrl());
|
||||
record.setShotDate(faceSample.getCreateAt());
|
||||
}
|
||||
} else {
|
||||
record.setFaceUrl(getFaceUrl(record.getFaceSampleId()));
|
||||
}
|
||||
@ -218,7 +224,6 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
}
|
||||
faceSampleEntity.setUpdateAt(new Date());
|
||||
faceSampleMapper.update(faceSampleEntity);
|
||||
addFaceSampleUrlCache(faceSampleId, faceSampleRespVO.getFaceUrl());
|
||||
return respVo;
|
||||
}
|
||||
|
||||
@ -229,6 +234,11 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
request.setDbName(dbName);
|
||||
request.setEntityId(entityId);
|
||||
IAcsClient client = getClient();
|
||||
try {
|
||||
limiter.allowRequest();
|
||||
} catch (InterruptedException e) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
client.getAcsResponse(request);
|
||||
} catch (ClientException e) {
|
||||
@ -465,30 +475,4 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
}
|
||||
redisTemplate.opsForValue().set(FaceConstant.FACE_USER_URL_PFX + faceId, faceUrl, 3, TimeUnit.DAYS);
|
||||
}
|
||||
public String getFaceSampleUrl(Long faceSampleId) {
|
||||
if (faceSampleId == null) {
|
||||
return null;
|
||||
}
|
||||
if (redisTemplate.hasKey(FaceConstant.FACE_SAMPLE_URL_PFX + faceSampleId)) {
|
||||
return redisTemplate.opsForValue().get(FaceConstant.FACE_SAMPLE_URL_PFX + faceSampleId);
|
||||
}
|
||||
FaceSampleRespVO faceSampleRespVO = faceSampleMapper.getById(faceSampleId);
|
||||
if (faceSampleRespVO == null) {
|
||||
return null;
|
||||
}
|
||||
String faceUrl = faceSampleRespVO.getFaceUrl();
|
||||
if (StringUtils.isNotBlank(faceUrl)) {
|
||||
addFaceSampleUrlCache(faceSampleId, faceUrl);
|
||||
}
|
||||
return faceUrl;
|
||||
}
|
||||
public void addFaceSampleUrlCache(Long faceSampleId, String faceUrl) {
|
||||
if (faceSampleId == null) {
|
||||
return;
|
||||
}
|
||||
if (StringUtils.isBlank(faceUrl)) {
|
||||
return;
|
||||
}
|
||||
redisTemplate.opsForValue().set(FaceConstant.FACE_SAMPLE_URL_PFX + faceSampleId, faceUrl, 3, TimeUnit.DAYS);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user