use of com.tencent.polaris.api.pojo.ServiceEventKey in project polaris-java by polarismesh.
the class Validator method validateGetResourcesRequest.
/**
* 校验获取资源请求
*
* @param request 请求对象
* @throws PolarisException 校验失败
*/
public static void validateGetResourcesRequest(GetResourcesRequest request) throws PolarisException {
Set<ServiceEventKey> svcEventKeys = request.getSvcEventKeys();
if (CollectionUtils.isEmpty(svcEventKeys)) {
return;
}
for (ServiceEventKey svcEventKey : svcEventKeys) {
ServiceKey serviceKey = svcEventKey.getServiceKey();
ServiceEventKey.EventType eventType = svcEventKey.getEventType();
if (null == serviceKey || null == eventType) {
throw new PolarisException(ErrorCode.API_INVALID_ARGUMENT, "missing service key or event type");
}
CommonValidator.validateNamespaceService(serviceKey.getNamespace(), serviceKey.getService());
}
}
use of com.tencent.polaris.api.pojo.ServiceEventKey in project polaris-java by polarismesh.
the class MessagePersistHandler method loadPersistedServices.
/**
* 遍历缓存目录并加载之前缓存的服务信息
*
* @param message 消息对象
* @return 服务标识-消息对象的集合
*/
public Map<ServiceEventKey, Message> loadPersistedServices(Message message) {
Path curDir = Paths.get(persistDirPath);
Map<ServiceEventKey, Message> result = new HashMap<>();
try {
Files.walkFileTree(curDir, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path filePath, BasicFileAttributes attrs) {
Path fileNamePath = filePath.getFileName();
if (null == fileNamePath) {
return FileVisitResult.CONTINUE;
}
String fileName = fileNamePath.toString();
if (!REGEX_PATTERN_SERVICE.matcher(fileName).matches()) {
return FileVisitResult.CONTINUE;
}
ServiceEventKey svcEventKey = fileNameToServiceKey(fileName);
int retryTimes = 0;
Message readMessage = null;
while (retryTimes <= maxReadRetry) {
retryTimes++;
Message.Builder builder = message.newBuilderForType();
readMessage = loadMessage(filePath.toFile(), builder);
if (null == readMessage) {
Utils.sleepUninterrupted(retryInterval);
continue;
}
break;
}
if (null == readMessage) {
LOG.debug("fail to read service from {} after retry {} times", fileName, retryTimes);
return FileVisitResult.CONTINUE;
}
result.put(svcEventKey, readMessage);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
LOG.error("fail to visit cache directory {}", persistDirPath);
}
return result;
}
use of com.tencent.polaris.api.pojo.ServiceEventKey in project polaris-java by polarismesh.
the class DefaultRouterAPI method processRouters.
@Override
public ProcessRoutersResponse processRouters(ProcessRoutersRequest request) throws PolarisException {
checkAvailable("RouterAPI");
RouterValidator.validateProcessRouterRequest(request);
RouterNamesGroup requestRouterGroup = request.getRouters();
List<ServiceRouter> beforeRouters;
if (null != requestRouterGroup && CollectionUtils.isNotEmpty(requestRouterGroup.getBeforeRouters())) {
beforeRouters = Extensions.loadServiceRouters(requestRouterGroup.getBeforeRouters(), extensions.getPlugins(), true);
} else {
beforeRouters = extensions.getConfigRouterChainGroup().getBeforeRouters();
}
List<ServiceRouter> afterRouters;
if (null != requestRouterGroup && CollectionUtils.isNotEmpty(requestRouterGroup.getAfterRouters())) {
afterRouters = Extensions.loadServiceRouters(requestRouterGroup.getAfterRouters(), extensions.getPlugins(), true);
} else {
afterRouters = extensions.getConfigRouterChainGroup().getAfterRouters();
}
List<ServiceRouter> coreRouters;
if (null != requestRouterGroup && CollectionUtils.isNotEmpty(requestRouterGroup.getCoreRouters())) {
coreRouters = Extensions.loadServiceRouters(requestRouterGroup.getCoreRouters(), extensions.getPlugins(), true);
} else {
coreRouters = extensions.getConfigRouterChainGroup().getCoreRouters();
}
ServiceInstances dstInstances = request.getDstInstances();
RouteInfo routeInfo = new RouteInfo(request.getSourceService(), dstInstances, request.getMethod());
// 获取路由规则
DefaultFlowControlParam engineFlowControlParam = new DefaultFlowControlParam();
BaseFlow.buildFlowControlParam(request, config, engineFlowControlParam);
Set<ServiceEventKey> routerKeys = new HashSet<>();
ServiceEventKey dstSvcEventKey = new ServiceEventKey(new ServiceKey(dstInstances.getNamespace(), dstInstances.getService()), EventType.ROUTING);
routerKeys.add(dstSvcEventKey);
ServiceEventKey srcSvcEventKey = null;
if (null != routeInfo.getSourceService() && StringUtils.isNotBlank(routeInfo.getSourceService().getNamespace()) && StringUtils.isNotBlank(routeInfo.getSourceService().getService())) {
srcSvcEventKey = new ServiceEventKey(new ServiceKey(routeInfo.getSourceService().getNamespace(), routeInfo.getSourceService().getService()), EventType.ROUTING);
routerKeys.add(srcSvcEventKey);
}
DefaultServiceEventKeysProvider svcKeysProvider = new DefaultServiceEventKeysProvider();
svcKeysProvider.setSvcEventKeys(routerKeys);
ResourcesResponse resourcesResponse = BaseFlow.syncGetResources(extensions, false, svcKeysProvider, engineFlowControlParam);
routeInfo.setDestRouteRule(resourcesResponse.getServiceRule(dstSvcEventKey));
if (null != srcSvcEventKey) {
routeInfo.setSourceRouteRule(resourcesResponse.getServiceRule(srcSvcEventKey));
}
// 执行路由
DefaultRouterChainGroup routerChainGroup = new DefaultRouterChainGroup(beforeRouters, coreRouters, afterRouters);
ServiceInstances svcInstances = BaseFlow.processServiceRouters(routeInfo, dstInstances, routerChainGroup);
return new ProcessRoutersResponse(svcInstances);
}
Aggregations