添加更多锁
This commit is contained in:
parent
b4aa3619ba
commit
ff82644f47
@ -38,6 +38,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
||||
private static final Map<String, IRateLimiter> addFaceLimiters = new ConcurrentHashMap<>();
|
||||
private static final Map<String, IRateLimiter> addDbLimiters = new ConcurrentHashMap<>();
|
||||
private static final Map<String, IRateLimiter> listDbLimiters = new ConcurrentHashMap<>();
|
||||
private static final Map<String, IRateLimiter> listFaceLimiters = new ConcurrentHashMap<>();
|
||||
private static final Map<String, IRateLimiter> searchFaceLimiters = new ConcurrentHashMap<>();
|
||||
private static final Map<String, IRateLimiter> deleteDbLimiters = new ConcurrentHashMap<>();
|
||||
private static final Map<String, IRateLimiter> deleteEntityLimiters = new ConcurrentHashMap<>();
|
||||
@ -62,40 +63,21 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
||||
private IRateLimiter getLimiter(LOCK_TYPE type) {
|
||||
switch (type) {
|
||||
case ADD_DB:
|
||||
if (addDbLimiters.get(config.getAccessKeyId()) == null) {
|
||||
addDbLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return addDbLimiters.get(config.getAccessKeyId());
|
||||
return addDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
case ADD_ENTITY:
|
||||
if (addEntityLimiters.get(config.getAccessKeyId()) == null) {
|
||||
addEntityLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return addEntityLimiters.get(config.getAccessKeyId());
|
||||
return addEntityLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
case ADD_FACE:
|
||||
if (addFaceLimiters.get(config.getAccessKeyId()) == null) {
|
||||
addFaceLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return addFaceLimiters.get(config.getAccessKeyId());
|
||||
return addFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
case LIST_DB:
|
||||
if (listDbLimiters.get(config.getAccessKeyId()) == null) {
|
||||
listDbLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(500, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return listDbLimiters.get(config.getAccessKeyId());
|
||||
return listDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(500, TimeUnit.MILLISECONDS));
|
||||
case LIST_FACE:
|
||||
return listFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(2));
|
||||
case SEARCH_FACE:
|
||||
if (searchFaceLimiters.get(config.getAccessKeyId()) == null) {
|
||||
searchFaceLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(200, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return searchFaceLimiters.get(config.getAccessKeyId());
|
||||
return searchFaceLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(200, TimeUnit.MILLISECONDS));
|
||||
case DELETE_DB:
|
||||
if (deleteDbLimiters.get(config.getAccessKeyId()) == null) {
|
||||
deleteDbLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return deleteDbLimiters.get(config.getAccessKeyId());
|
||||
return deleteDbLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
case DELETE_ENTITY:
|
||||
if (deleteEntityLimiters.get(config.getAccessKeyId()) == null) {
|
||||
deleteEntityLimiters.put(config.getAccessKeyId(), new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return deleteEntityLimiters.get(config.getAccessKeyId());
|
||||
return deleteEntityLimiters.computeIfAbsent(config.getAccessKeyId(), k -> new FixedRateLimiter(600, TimeUnit.MILLISECONDS));
|
||||
default:
|
||||
return new FixedRateLimiter(600, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
@ -240,6 +222,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
||||
|
||||
@Override
|
||||
public List<String> listFace(String dbName, String prefix, Integer offset, Integer size) {
|
||||
IRateLimiter listFaceLimiter = getLimiter(LOCK_TYPE.LIST_FACE);
|
||||
ListFaceEntitiesRequest listFaceEntitiesRequest = new ListFaceEntitiesRequest();
|
||||
listFaceEntitiesRequest.setDbName(dbName);
|
||||
listFaceEntitiesRequest.setOrder("asc");
|
||||
@ -256,6 +239,10 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
||||
}
|
||||
try (ClientWrapper clientWrapper = getClient()) {
|
||||
IAcsClient client = clientWrapper.getClient();
|
||||
try {
|
||||
listFaceLimiter.acquire();
|
||||
} catch (InterruptedException ignored) {
|
||||
}
|
||||
try {
|
||||
ListFaceEntitiesResponse response = client.getAcsResponse(listFaceEntitiesRequest);
|
||||
return response.getData().getEntities().stream().map(ListFaceEntitiesResponse.Data.Entity::getEntityId).collect(Collectors.toList());
|
||||
@ -337,6 +324,7 @@ public class AliFaceBodyAdapter implements IFaceBodyAdapter {
|
||||
ADD_ENTITY,
|
||||
ADD_FACE,
|
||||
LIST_DB,
|
||||
LIST_FACE,
|
||||
SEARCH_FACE,
|
||||
DELETE_DB,
|
||||
DELETE_ENTITY,
|
||||
|
@ -320,45 +320,21 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter {
|
||||
private IRateLimiter getLimiter(LOCK_TYPE type) {
|
||||
switch (type) {
|
||||
case ADD_DB:
|
||||
if (addDbLimiters.get(config.getAppId()) == null) {
|
||||
addDbLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return addDbLimiters.get(config.getAppId());
|
||||
return addDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
case ADD_FACE:
|
||||
if (addFaceLimiters.get(config.getAppId()) == null) {
|
||||
addFaceLimiters.put(config.getAppId(), new FixedRateLimiter(config.getAddQps()));
|
||||
}
|
||||
return addFaceLimiters.get(config.getAppId());
|
||||
return addFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getAddQps()));
|
||||
case LIST_DB:
|
||||
if (listDbLimiters.get(config.getAppId()) == null) {
|
||||
listDbLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return listDbLimiters.get(config.getAppId());
|
||||
return listDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
case LIST_FACE:
|
||||
if (listFaceLimiters.get(config.getAppId()) == null) {
|
||||
listFaceLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return listFaceLimiters.get(config.getAppId());
|
||||
return listFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
case SEARCH_FACE:
|
||||
if (searchFaceLimiters.get(config.getAppId()) == null) {
|
||||
searchFaceLimiters.put(config.getAppId(), new FixedRateLimiter(config.getSearchQps()));
|
||||
}
|
||||
return searchFaceLimiters.get(config.getAppId());
|
||||
return searchFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getSearchQps()));
|
||||
case DELETE_DB:
|
||||
if (deleteDbLimiters.get(config.getAppId()) == null) {
|
||||
deleteDbLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return deleteDbLimiters.get(config.getAppId());
|
||||
return deleteDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
case DELETE_ENTITY:
|
||||
if (deleteEntityLimiters.get(config.getAppId()) == null) {
|
||||
deleteEntityLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return deleteEntityLimiters.get(config.getAppId());
|
||||
return deleteEntityLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
case DELETE_FACE:
|
||||
if (deleteFaceLimiters.get(config.getAppId()) == null) {
|
||||
deleteFaceLimiters.put(config.getAppId(), new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
}
|
||||
return deleteFaceLimiters.get(config.getAppId());
|
||||
return deleteFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS));
|
||||
default:
|
||||
return new FixedRateLimiter(500, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user