use of com.huawei.registry.services.RegisterCenterService in project Sermant by huaweicloud.
the class DiscoveryClientServiceInterceptor method doBefore.
@Override
public ExecuteContext doBefore(ExecuteContext context) {
if (isMarked()) {
return context;
}
try {
mark();
final RegisterCenterService service = ServiceManager.getService(RegisterCenterService.class);
final List<String> services = new ArrayList<>(service.getServices());
if (isOpenMigration() && RegisterContext.INSTANCE.isAvailable()) {
// 合并两个注册中心
final DiscoveryClient discoveryClient = (DiscoveryClient) context.getObject();
services.addAll(discoveryClient.getServices());
}
context.skip(services.stream().distinct().collect(Collectors.toList()));
} finally {
unMark();
}
return context;
}
use of com.huawei.registry.services.RegisterCenterService in project Sermant by huaweicloud.
the class DiscoveryClientInterceptor method doBefore.
@Override
public ExecuteContext doBefore(ExecuteContext context) {
if (isMarked()) {
return context;
}
try {
mark();
String serviceId = (String) context.getArguments()[0];
final RegisterCenterService service = ServiceManager.getService(RegisterCenterService.class);
final List<MicroServiceInstance> microServiceInstances = service.getServerList(serviceId);
if (!microServiceInstances.isEmpty()) {
context.skip(convertAndMerge(microServiceInstances, serviceId));
}
} finally {
unMark();
}
return context;
}
use of com.huawei.registry.services.RegisterCenterService in project Sermant by huaweicloud.
the class RegistrationInterceptor method doBefore.
@Override
public ExecuteContext doBefore(ExecuteContext context) {
if (!(context.getArguments()[0] instanceof Registration)) {
return context;
}
fillClientInfo((Registration) context.getArguments()[0]);
final RegisterCenterService service = ServiceManager.getService(RegisterCenterService.class);
final FixedResult fixedResult = new FixedResult();
service.register(fixedResult);
if (fixedResult.isSkip()) {
context.skip(fixedResult.getResult());
}
return context;
}
use of com.huawei.registry.services.RegisterCenterService in project Sermant by huaweicloud.
the class ServerListInterceptor method doBefore.
@Override
public ExecuteContext doBefore(ExecuteContext context) {
// ServerList存在层层调用场景,此处使用外部共享线程变量保证仅在其最外层ServerList实现拦截
if (MarkUtils.isMarked()) {
// 此处针对当前线程, 如果是拦截器内部调用直接pass
return context;
}
MarkUtils.mark();
try {
Optional<String> serviceIdOption = getServiceName(context);
if (!serviceIdOption.isPresent()) {
return context;
}
final RegisterCenterService service = ServiceManager.getService(RegisterCenterService.class);
String serviceName = serviceIdOption.get();
final List<MicroServiceInstance> serverList = service.getServerList(serviceName);
if (!serverList.isEmpty()) {
// 单注册中心场景无需合并
context.skip(convertAndMerge(context.getObject(), serverList, serviceName));
}
} finally {
MarkUtils.unMark();
}
return context;
}
Aggregations