Search in sources :

Example 1 with RegisterCenterService

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;
}
Also used : ArrayList(java.util.ArrayList) DiscoveryClient(org.springframework.cloud.client.discovery.DiscoveryClient) RegisterCenterService(com.huawei.registry.services.RegisterCenterService)

Example 2 with RegisterCenterService

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;
}
Also used : MicroServiceInstance(com.huawei.registry.entity.MicroServiceInstance) RegisterCenterService(com.huawei.registry.services.RegisterCenterService)

Example 3 with RegisterCenterService

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;
}
Also used : FixedResult(com.huawei.registry.entity.FixedResult) Registration(org.springframework.cloud.client.serviceregistry.Registration) RegisterCenterService(com.huawei.registry.services.RegisterCenterService)

Example 4 with RegisterCenterService

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;
}
Also used : MicroServiceInstance(com.huawei.registry.entity.MicroServiceInstance) RegisterCenterService(com.huawei.registry.services.RegisterCenterService)

Aggregations

RegisterCenterService (com.huawei.registry.services.RegisterCenterService)4 MicroServiceInstance (com.huawei.registry.entity.MicroServiceInstance)2 FixedResult (com.huawei.registry.entity.FixedResult)1 ArrayList (java.util.ArrayList)1 DiscoveryClient (org.springframework.cloud.client.discovery.DiscoveryClient)1 Registration (org.springframework.cloud.client.serviceregistry.Registration)1