alibaba/nacos · error · NacosException

INVALID_PARAM

INVALID_PARAM

Error message

Unsupported request type %s

What it means

Thrown by InstanceRequestHandler.handle() when a gRPC InstanceRequest has a type other than REGISTER_INSTANCE or DE_REGISTER_INSTANCE. The switch covers only those two; any other value falls to default and raises NacosException.INVALID_PARAM with the bad type. Typically a client/server version or protocol mismatch.

Source

Thrown at naming/src/main/java/com/alibaba/nacos/naming/remote/rpc/handler/InstanceRequestHandler.java:76

    @Override
    @NamespaceValidation
    @TpsControl(pointName = "RemoteNamingInstanceRegisterDeregister",
        name = "RemoteNamingInstanceRegisterDeregister")
    @Secured(action = ActionTypes.WRITE)
    @ExtractorManager.Extractor(rpcExtractor = InstanceRequestParamExtractor.class)
    public InstanceResponse handle(InstanceRequest request, RequestMeta meta)
        throws NacosException {
        Service service = Service.newService(request.getNamespace(), request.getGroupName(),
            request.getServiceName(),
            true);
        InstanceUtil.setInstanceIdIfEmpty(request.getInstance(), service.getGroupedServiceName());
        switch (request.getType()) {
            case NamingRemoteConstants.REGISTER_INSTANCE:
                return registerInstance(service, request, meta);
            case NamingRemoteConstants.DE_REGISTER_INSTANCE:
                return deregisterInstance(service, request, meta);
            default:
                throw new NacosException(NacosException.INVALID_PARAM,
                    String.format("Unsupported request type %s", request.getType()));
        }
    }
    
    private InstanceResponse registerInstance(Service service, InstanceRequest request,
        RequestMeta meta)
        throws NacosException {
        Instance instance = request.getInstance();
        if (null == instance) {
            throw new NacosException(NacosException.INVALID_PARAM,
                "Required parameter 'instance' is missing.");
        }
        instance.validate();
        clientOperationService.registerInstance(service, instance, meta.getConnectionId());
        NotifyCenter.publishEvent(new RegisterInstanceTraceEvent(System.currentTimeMillis(),
            NamingRequestUtil.getSourceIpForGrpcRequest(meta), true, service.getNamespace(),
            service.getGroup(),
            service.getName(), instance.getIp(), instance.getPort()));

View on GitHub (pinned to 9b989acdf1)

Solutions

  1. Set request type to NamingRemoteConstants.REGISTER_INSTANCE or DE_REGISTER_INSTANCE.
  2. Use matching client/server Nacos versions.
  3. For batch registration, use BatchInstanceRequest; for fuzzy watch, use the watch request.

Example fix

// before
InstanceRequest req = new InstanceRequest(ns, group, svc, "register", instance);
// after
InstanceRequest req = new InstanceRequest(ns, group, svc,
    NamingRemoteConstants.REGISTER_INSTANCE, instance);
Defensive patterns

Strategy: type-guard

Validate before calling

String type = request.getType();
if (!NamingRemoteConstants.REGISTER_INSTANCE.equals(type)
    && !NamingRemoteConstants.DE_REGISTER_INSTANCE.equals(type)) {
    throw new IllegalArgumentException("Unsupported instance request type: " + type);
}

Type guard

static boolean isSupportedInstanceType(String type) {
    return NamingRemoteConstants.REGISTER_INSTANCE.equals(type)
        || NamingRemoteConstants.DE_REGISTER_INSTANCE.equals(type);
}

Try / catch

try {
    namingService.registerInstance(serviceName, instance);
} catch (NacosException e) {
    if (e.getErrCode() == NacosException.INVALID_PARAM
        && e.getMessage().contains("Unsupported request type")) {
        // check SDK/server version alignment before retrying
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: Client sends an InstanceRequest whose type is not 'registerInstance' or 'deregisterInstance'.

Common situations: SDK and server on incompatible versions; a hand-crafted gRPC client with the wrong type constant; reusing an InstanceRequest for a query operation.

Related errors


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