@Override
    @TpsControl(pointName = "RemoteNamingServiceListQuery", name = "RemoteNamingServiceListQuery")
    @Secured(action = ActionTypes.READ)
    @ExtractorManager.Extractor(rpcExtractor = ServiceListRequestParamExtractor.class)
    public ServiceListResponse handle(ServiceListRequest request, RequestMeta meta) throws NacosException {
        Collection<Service> serviceSet = ServiceManager.getInstance().getSingletons(request.getNamespace());
        ServiceListResponse result = ServiceListResponse.buildSuccessResponse(0, new LinkedList<>());
        if (!serviceSet.isEmpty()) {
            Collection<String> serviceNameSet = selectServiceWithGroupName(serviceSet, request.getGroupName());
            // TODO select service by selector
            List<String> serviceNameList = ServiceUtil
                    .pageServiceName(request.getPageNo(), request.getPageSize(), serviceNameSet);
            result.setCount(serviceNameSet.size());
            result.setServiceNames(serviceNameList);
        }
        return result;
    }
@Test
    void testHandle() throws NacosException {
        ServiceListRequest serviceListRequest = new ServiceListRequest();
        serviceListRequest.setNamespace("A");
        serviceListRequest.setPageNo(1);
        serviceListRequest.setPageSize(10);
        serviceListRequest.setGroupName("B");
        ServiceListRequestHandler serviceListRequestHandler = new ServiceListRequestHandler();
        ServiceListResponse serviceListResponse = serviceListRequestHandler.handle(serviceListRequest, new RequestMeta());
        assertEquals(1, serviceListResponse.getCount());
        assertTrue(serviceListResponse.getServiceNames().contains("C"));
    }