Search in sources :

Example 11 with ServiceInfo

use of com.tencent.polaris.api.pojo.ServiceInfo in project spring-cloud-tencent by Tencent.

the class PolarisRoutingLoadBalancer method getReachableServers.

@Override
public List<Server> getReachableServers() {
    List<Server> allServers = super.getAllServers();
    if (CollectionUtils.isEmpty(allServers)) {
        return allServers;
    }
    ServiceInstances serviceInstances = null;
    if (allServers.get(0) instanceof PolarisServer) {
        serviceInstances = ((PolarisServer) allServers.get(0)).getServiceInstances();
    } else {
        String serviceName;
        // notice the difference between different service registries
        if (StringUtils.isNotBlank(allServers.get(0).getMetaInfo().getServiceIdForDiscovery())) {
            serviceName = allServers.get(0).getMetaInfo().getServiceIdForDiscovery();
        } else {
            serviceName = allServers.get(0).getMetaInfo().getAppName();
        }
        if (StringUtils.isBlank(serviceName)) {
            throw new IllegalStateException("PolarisRoutingLoadBalancer only Server with AppName or ServiceIdForDiscovery attribute");
        }
        ServiceKey serviceKey = new ServiceKey(MetadataContextHolder.LOCAL_NAMESPACE, serviceName);
        List<Instance> instances = new ArrayList<>(8);
        for (Server server : allServers) {
            DefaultInstance instance = new DefaultInstance();
            instance.setNamespace(MetadataContextHolder.LOCAL_NAMESPACE);
            instance.setService(serviceName);
            instance.setHealthy(server.isAlive());
            instance.setProtocol(server.getScheme());
            instance.setId(server.getId());
            instance.setHost(server.getHost());
            instance.setPort(server.getPort());
            instance.setZone(server.getZone());
            instance.setWeight(100);
            instances.add(instance);
        }
        serviceInstances = new DefaultServiceInstances(serviceKey, instances);
    }
    ProcessRoutersRequest processRoutersRequest = new ProcessRoutersRequest();
    processRoutersRequest.setDstInstances(serviceInstances);
    String srcNamespace = MetadataContextHolder.get().getSystemMetadata(SystemMetadataKey.LOCAL_NAMESPACE);
    String srcService = MetadataContextHolder.get().getSystemMetadata(SystemMetadataKey.LOCAL_SERVICE);
    Map<String, String> transitiveCustomMetadata = MetadataContextHolder.get().getAllTransitiveCustomMetadata();
    String method = MetadataContextHolder.get().getSystemMetadata(SystemMetadataKey.PEER_PATH);
    processRoutersRequest.setMethod(method);
    if (StringUtils.isNotBlank(srcNamespace) && StringUtils.isNotBlank(srcService)) {
        ServiceInfo serviceInfo = new ServiceInfo();
        serviceInfo.setNamespace(srcNamespace);
        serviceInfo.setService(srcService);
        serviceInfo.setMetadata(transitiveCustomMetadata);
        processRoutersRequest.setSourceService(serviceInfo);
    }
    ProcessRoutersResponse processRoutersResponse = routerAPI.processRouters(processRoutersRequest);
    ServiceInstances filteredServiceInstances = processRoutersResponse.getServiceInstances();
    List<Server> filteredInstances = new ArrayList<>();
    for (Instance instance : filteredServiceInstances.getInstances()) {
        filteredInstances.add(new PolarisServer(serviceInstances, instance));
    }
    return filteredInstances;
}
Also used : Server(com.netflix.loadbalancer.Server) PolarisServer(com.tencent.cloud.polaris.pojo.PolarisServer) DefaultInstance(com.tencent.polaris.api.pojo.DefaultInstance) Instance(com.tencent.polaris.api.pojo.Instance) ProcessRoutersRequest(com.tencent.polaris.router.api.rpc.ProcessRoutersRequest) ArrayList(java.util.ArrayList) ServiceKey(com.tencent.polaris.api.pojo.ServiceKey) ServiceInfo(com.tencent.polaris.api.pojo.ServiceInfo) ProcessRoutersResponse(com.tencent.polaris.router.api.rpc.ProcessRoutersResponse) DefaultServiceInstances(com.tencent.polaris.api.pojo.DefaultServiceInstances) ServiceInstances(com.tencent.polaris.api.pojo.ServiceInstances) DefaultInstance(com.tencent.polaris.api.pojo.DefaultInstance) DefaultServiceInstances(com.tencent.polaris.api.pojo.DefaultServiceInstances) PolarisServer(com.tencent.cloud.polaris.pojo.PolarisServer)

Example 12 with ServiceInfo

use of com.tencent.polaris.api.pojo.ServiceInfo in project polaris-java by polarismesh.

the class ConsulAPIConnector method syncGetServices.

@Override
public Services syncGetServices(ServiceUpdateTask serviceUpdateTask) {
    Services services = new ServicesByProto(new ArrayList<>());
    try {
        CatalogServicesRequest request = CatalogServicesRequest.newBuilder().setQueryParams(QueryParams.DEFAULT).build();
        ArrayList<String> serviceList = new ArrayList<>(this.consulClient.getCatalogServices(request).getValue().keySet());
        for (String s : serviceList) {
            ServiceInfo serviceInfo = new ServiceInfo();
            serviceInfo.setService(s);
            services.getServices().add(serviceInfo);
        }
    } catch (ConsulException e) {
        throw ServerErrorResponseException.build(ErrorCode.SERVER_USER_ERROR.ordinal(), String.format("Get services of %s instances sync failed.", serviceUpdateTask.getServiceEventKey().getServiceKey()));
    }
    return services;
}
Also used : ServiceInfo(com.tencent.polaris.api.pojo.ServiceInfo) Services(com.tencent.polaris.api.pojo.Services) ConsulException(com.ecwid.consul.ConsulException) CatalogServicesRequest(com.ecwid.consul.v1.catalog.CatalogServicesRequest) ArrayList(java.util.ArrayList) ServicesByProto(com.tencent.polaris.client.pojo.ServicesByProto)

Example 13 with ServiceInfo

use of com.tencent.polaris.api.pojo.ServiceInfo in project polaris-java by polarismesh.

the class RouterExample method main.

public static void main(String[] args) throws Exception {
    InitResult initResult = ExampleUtils.initConsumerConfiguration(args);
    String namespace = initResult.getNamespace();
    String service = initResult.getService();
    try (SDKContext sdkContext = SDKContext.initContext()) {
        ConsumerAPI consumerAPI = DiscoveryAPIFactory.createConsumerAPIByContext(sdkContext);
        RouterAPI routerAPI = RouterAPIFactory.createRouterAPIByContext(sdkContext);
        // 1. 拉取全量服务实例
        GetAllInstancesRequest getAllInstancesRequest = new GetAllInstancesRequest();
        getAllInstancesRequest.setNamespace(namespace);
        getAllInstancesRequest.setService(service);
        InstancesResponse allInstanceResp = consumerAPI.getAllInstance(getAllInstancesRequest);
        ServiceInstances dstInstances = allInstanceResp.toServiceInstances();
        // 2. 执行服务路由
        ProcessRoutersRequest processRoutersRequest = new ProcessRoutersRequest();
        // 被调服务
        System.out.printf("instances count before routing is %s%n", dstInstances.getInstances().size());
        // 主调方信息
        ServiceInfo srcSourceInfo = new ServiceInfo();
        Map<String, String> labels = new HashMap<>();
        labels.put("env", "test");
        srcSourceInfo.setMetadata(labels);
        RouterNamesGroup routerNamesGroup = new RouterNamesGroup();
        List<String> coreRouters = new ArrayList<>();
        coreRouters.add(ServiceRouterConfig.DEFAULT_ROUTER_RULE);
        coreRouters.add(ServiceRouterConfig.DEFAULT_ROUTER_METADATA);
        coreRouters.add(ServiceRouterConfig.DEFAULT_ROUTER_NEARBY);
        // 设置走规则路由
        routerNamesGroup.setCoreRouters(coreRouters);
        processRoutersRequest.setDstInstances(dstInstances);
        processRoutersRequest.setSourceService(srcSourceInfo);
        processRoutersRequest.setRouters(routerNamesGroup);
        ProcessRoutersResponse processRoutersResponse = routerAPI.processRouters(processRoutersRequest);
        System.out.printf("instances count after routing is %s%n", processRoutersResponse.getServiceInstances().getInstances().size());
        // 3. 执行负载均衡
        ProcessLoadBalanceRequest processLoadBalanceRequest = new ProcessLoadBalanceRequest();
        processLoadBalanceRequest.setDstInstances(processRoutersResponse.getServiceInstances());
        processLoadBalanceRequest.setLbPolicy(LoadBalanceConfig.LOAD_BALANCE_WEIGHTED_RANDOM);
        ProcessLoadBalanceResponse processLoadBalanceResponse = routerAPI.processLoadBalance(processLoadBalanceRequest);
        System.out.printf("instances after lb is %s%n", processLoadBalanceResponse.getTargetInstance());
    }
}
Also used : HashMap(java.util.HashMap) RouterNamesGroup(com.tencent.polaris.router.api.rpc.ProcessRoutersRequest.RouterNamesGroup) ProcessRoutersRequest(com.tencent.polaris.router.api.rpc.ProcessRoutersRequest) ProcessLoadBalanceResponse(com.tencent.polaris.router.api.rpc.ProcessLoadBalanceResponse) ArrayList(java.util.ArrayList) RouterAPI(com.tencent.polaris.router.api.core.RouterAPI) SDKContext(com.tencent.polaris.client.api.SDKContext) ServiceInfo(com.tencent.polaris.api.pojo.ServiceInfo) ProcessRoutersResponse(com.tencent.polaris.router.api.rpc.ProcessRoutersResponse) ProcessLoadBalanceRequest(com.tencent.polaris.router.api.rpc.ProcessLoadBalanceRequest) ServiceInstances(com.tencent.polaris.api.pojo.ServiceInstances) InitResult(com.tencent.polaris.router.example.ExampleUtils.InitResult) GetAllInstancesRequest(com.tencent.polaris.api.rpc.GetAllInstancesRequest) ConsumerAPI(com.tencent.polaris.api.core.ConsumerAPI) InstancesResponse(com.tencent.polaris.api.rpc.InstancesResponse)

Example 14 with ServiceInfo

use of com.tencent.polaris.api.pojo.ServiceInfo in project polaris-java by polarismesh.

the class APIFacade method getInstances.

public static List<?> getInstances(String namespace, String service, Map<String, String> srcLabels, Map<String, String> dstLabels) {
    if (!inited.get()) {
        LOGGER.info("polaris not inited, updateServiceCallResult fail");
        return null;
    }
    GetInstancesRequest getInstancesRequest = new GetInstancesRequest();
    getInstancesRequest.setNamespace(namespace);
    getInstancesRequest.setService(service);
    if (MapUtils.isNotEmpty(srcLabels)) {
        ServiceInfo serviceInfo = new ServiceInfo();
        serviceInfo.setMetadata(srcLabels);
        getInstancesRequest.setServiceInfo(serviceInfo);
    }
    if (MapUtils.isNotEmpty(dstLabels)) {
        getInstancesRequest.setMetadata(dstLabels);
    }
    InstancesResponse instancesResp = consumerAPI.getInstances(getInstancesRequest);
    ServiceInstances serviceInstances = instancesResp.toServiceInstances();
    return serviceInstances.getInstances();
}
Also used : ServiceInfo(com.tencent.polaris.api.pojo.ServiceInfo) ServiceInstances(com.tencent.polaris.api.pojo.ServiceInstances) GetInstancesRequest(com.tencent.polaris.api.rpc.GetInstancesRequest) InstancesResponse(com.tencent.polaris.api.rpc.InstancesResponse)

Example 15 with ServiceInfo

use of com.tencent.polaris.api.pojo.ServiceInfo in project polaris-java by polarismesh.

the class PrometheusPushHandlerTest method mockCallerService.

private ServiceInfo mockCallerService() {
    ServiceInfo caller = new ServiceInfo();
    caller.setService("consumer");
    caller.setNamespace("Production");
    return caller;
}
Also used : ServiceInfo(com.tencent.polaris.api.pojo.ServiceInfo)

Aggregations

ServiceInfo (com.tencent.polaris.api.pojo.ServiceInfo)16 InstancesResponse (com.tencent.polaris.api.rpc.InstancesResponse)5 ProcessRoutersRequest (com.tencent.polaris.router.api.rpc.ProcessRoutersRequest)5 ArrayList (java.util.ArrayList)5 ServiceInstances (com.tencent.polaris.api.pojo.ServiceInstances)4 GetInstancesRequest (com.tencent.polaris.api.rpc.GetInstancesRequest)4 ProcessRoutersResponse (com.tencent.polaris.router.api.rpc.ProcessRoutersResponse)4 HashMap (java.util.HashMap)4 PolarisAgentProperties (cn.polarismesh.agent.core.spring.cloud.context.PolarisAgentProperties)3 ConsumerAPI (com.tencent.polaris.api.core.ConsumerAPI)3 DefaultInstance (com.tencent.polaris.api.pojo.DefaultInstance)3 ServiceKey (com.tencent.polaris.api.pojo.ServiceKey)3 DefaultServiceInstances (com.tencent.polaris.api.pojo.DefaultServiceInstances)2 Instance (com.tencent.polaris.api.pojo.Instance)2 ServiceEventKey (com.tencent.polaris.api.pojo.ServiceEventKey)2 Services (com.tencent.polaris.api.pojo.Services)2 ServicesByProto (com.tencent.polaris.client.pojo.ServicesByProto)2 Test (org.junit.Test)2 PolarisServiceInstance (cn.polarismesh.agent.core.spring.cloud.discovery.PolarisServiceInstance)1 ConsulException (com.ecwid.consul.ConsulException)1