添加限流工具,修改模板onlyIf

This commit is contained in:
2025-01-23 15:10:29 +08:00
parent 1aa1ae5e2b
commit 7bd9a7507f
10 changed files with 64 additions and 32 deletions

@ -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);
}
}