alibaba/nacos · error · NacosException

404

404

Error message

service %s@@%s is not found!

What it means

Thrown by CatalogServiceV2Impl.getServiceDetail when the requested service does not exist in the ServiceManager singleton registry. Error code is NOT_FOUND=404. The check uses ServiceManager.getInstance().containSingleton(service) which verifies the service has been registered/loaded on this server.

Source

Thrown at naming/src/main/java/com/alibaba/nacos/naming/core/CatalogServiceV2Impl.java:75

public class CatalogServiceV2Impl implements CatalogService {
    
    private final ServiceStorage serviceStorage;
    
    private final NamingMetadataManager metadataManager;
    
    public CatalogServiceV2Impl(ServiceStorage serviceStorage,
        NamingMetadataManager metadataManager) {
        this.serviceStorage = serviceStorage;
        this.metadataManager = metadataManager;
    }
    
    @Override
    public ServiceDetailInfo getServiceDetail(String namespaceId, String groupName,
        String serviceName)
        throws NacosException {
        Service service = Service.newService(namespaceId, groupName, serviceName);
        if (!ServiceManager.getInstance().containSingleton(service)) {
            throw new NacosException(NacosException.NOT_FOUND,
                String.format("service %s@@%s is not found!", groupName, serviceName));
        }
        service = ServiceManager.getInstance().getSingleton(service);
        Optional<ServiceMetadata> metadata = metadataManager.getServiceMetadata(service);
        ServiceMetadata detailedService = metadata.orElseGet(ServiceMetadata::new);
        
        ServiceDetailInfo result = new ServiceDetailInfo();
        result.setNamespaceId(service.getNamespace());
        result.setGroupName(service.getGroup());
        result.setServiceName(serviceName);
        result.setEphemeral(service.isEphemeral());
        result.setProtectThreshold(detailedService.getProtectThreshold());
        result.setSelector(detailedService.getSelector());
        result.setMetadata(detailedService.getExtendData());
        
        Map<String, ClusterInfo> clusters =
            new HashMap<>(serviceStorage.getClusters(service).size());
        for (String each : serviceStorage.getClusters(service)) {

View on GitHub (pinned to 9b989acdf1)

Solutions

  1. Verify the service exists by listing services in the target namespace/group first.
  2. Check the namespaceId, groupName, and serviceName for typos.
  3. If the server recently restarted, wait for service data to finish loading from persistent storage.
  4. Register/publish the service if it was expected to exist.
Defensive patterns

Strategy: try-catch

Validate before calling

// verify service exists before fetching detail
if (!ServiceManager.getInstance().containSingleton(
        Service.newService(namespaceId, groupName, serviceName))) {
    log.warn("service does not exist: {}/{}", groupName, serviceName);
    return;
}

Try / catch

try {
    ServiceDetailInfo detail = catalogService.getServiceDetail(namespaceId, groupName, serviceName);
} catch (NacosException e) {
    if (e.getErrCode() == NacosException.NOT_FOUND) {
        // service not registered; create it or inform user
    } else { throw e; }
}

Prevention

When it happens

Trigger: Calling the catalog service detail API (or the admin/console endpoint behind it) for a namespaceId/groupName/serviceName combination that has never been registered or has been removed.

Common situations: Querying a service that was never created. Service was deregistered/deleted between listing and detail lookup. Wrong namespace, group, or service name (typo). Querying a persistent service whose data has not yet loaded after a server restart.

Related errors


AI-assisted analysis of alibaba/nacos@9b989acdf1 (2026-08-14). Data as JSON: /api/errors/5ea7f85144151190. Report an issue: GitHub.