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