or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

configuration.mddistributed-locking.mdfactory-utilities.mdindex.mdservice-discovery.md
tile.json

tessl/maven-com-alibaba-nacos--nacos-client

Nacos client library for dynamic service discovery and configuration management in cloud native applications and microservices platforms

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/com.alibaba.nacos/nacos-client@3.0.x

To install, run

npx @tessl/cli install tessl/maven-com-alibaba-nacos--nacos-client@3.0.0

index.mddocs/

Nacos Client

Nacos client library for dynamic service discovery and configuration management in cloud native applications and microservices platforms. Nacos (Dynamic Naming and Configuration Service) provides essential infrastructure capabilities for building scalable, resilient distributed systems with centralized service management and configuration control.

Package Information

  • Package Name: nacos-client
  • Language: Java
  • Package Manager: Maven
  • Group ID: com.alibaba.nacos
  • Artifact ID: nacos-client
  • Installation:
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>3.0.2</version>
    </dependency>

Core Imports

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.exception.NacosException;

Specialized services:

import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.lock.NacosLockFactory;
import com.alibaba.nacos.api.lock.LockService;

Basic Usage

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.exception.NacosException;

import java.util.List;
import java.util.Properties;

public class NacosClientExample {
    public static void main(String[] args) throws NacosException {
        // Configure connection properties
        Properties properties = new Properties();
        properties.setProperty("serverAddr", "localhost:8848");
        properties.setProperty("namespace", "public");
        
        // Configuration Management
        ConfigService configService = NacosFactory.createConfigService(properties);
        
        // Get configuration
        String config = configService.getConfig("example.properties", "DEFAULT_GROUP", 5000);
        System.out.println("Configuration: " + config);
        
        // Publish configuration
        boolean published = configService.publishConfig("example.properties", "DEFAULT_GROUP", "key=value");
        
        // Service Discovery
        NamingService namingService = NacosFactory.createNamingService(properties);
        
        // Register service instance
        Instance instance = new Instance();
        instance.setIp("192.168.1.100");
        instance.setPort(8080);
        instance.setWeight(1.0);
        namingService.registerInstance("user-service", instance);
        
        // Discover service instances
        List<Instance> instances = namingService.getAllInstances("user-service");
        System.out.println("Found " + instances.size() + " instances");
    }
}

Architecture

Nacos client provides a multi-service architecture with clear separation of concerns:

  • Configuration Service: Centralized configuration management with real-time updates, change listeners, and atomic operations
  • Naming Service: Service registration, discovery, and health monitoring with support for clusters and load balancing
  • Lock Service: Distributed locking for coordination across microservices
  • Event System: Reactive listeners for configuration changes and service instance updates

The client uses a factory pattern for service creation, supports multiple server addresses for high availability, and provides extensive customization through properties configuration. All services support namespace isolation for multi-tenant environments.

Capabilities

Configuration Management

Centralized configuration management with real-time updates, change listeners, atomic CAS operations, and fuzzy pattern-based watching. Supports multiple configuration formats and provides filtering mechanisms for request/response processing.

public interface ConfigService {
    String getConfig(String dataId, String group, long timeoutMs) throws NacosException;
    boolean publishConfig(String dataId, String group, String content) throws NacosException;
    boolean removeConfig(String dataId, String group) throws NacosException;
    void addListener(String dataId, String group, Listener listener) throws NacosException;
    void removeListener(String dataId, String group, Listener listener);
}

Configuration Management

Service Discovery and Registration

Service registration, discovery, and health monitoring with support for weighted load balancing, cluster management, and real-time instance updates. Includes batch operations and event-driven programming model.

public interface NamingService {
    void registerInstance(String serviceName, Instance instance) throws NacosException;
    void deregisterInstance(String serviceName, Instance instance) throws NacosException;
    List<Instance> getAllInstances(String serviceName) throws NacosException;
    List<Instance> selectInstances(String serviceName, boolean healthy) throws NacosException;
    Instance selectOneHealthyInstance(String serviceName) throws NacosException;
    void subscribe(String serviceName, EventListener listener) throws NacosException;
    List<ServiceInfo> getSubscribeServices() throws NacosException;
}

Service Discovery

Distributed Locking

Distributed locking capabilities for coordination and synchronization across microservices. Supports lock expiration, try-lock operations, and remote lock management.

public interface LockService {
    Boolean lock(LockInstance instance) throws NacosException;
    Boolean unLock(LockInstance instance) throws NacosException;
    Boolean remoteTryLock(LockInstance instance) throws NacosException;
    Boolean remoteReleaseLock(LockInstance instance) throws NacosException;
    void shutdown() throws NacosException;
}

Distributed Locking

Factory and Utilities

Service factory methods, utility classes, annotation support, and comprehensive exception handling. Includes capability management and extensive configuration options.

public class NacosFactory {
    public static ConfigService createConfigService(Properties properties) throws NacosException;
    public static NamingService createNamingService(Properties properties) throws NacosException;
    public static LockService createLockService(Properties properties) throws NacosException;
}

Factory and Utilities

Types

Core Data Models

public class Instance {
    private String instanceId;
    private String ip;
    private int port;
    private double weight;
    private boolean healthy;
    private boolean enabled;
    private boolean ephemeral;
    private String clusterName;
    private String serviceName;
    private Map<String, String> metadata;
    
    // Constructor and getter/setter methods
    public Instance();
    public String getIp();
    public void setIp(String ip);
    public int getPort();
    public void setPort(int port);
    public double getWeight();
    public void setWeight(double weight);
    public boolean isHealthy();
    public void setHealthy(boolean healthy);
    public Map<String, String> getMetadata();
    public void setMetadata(Map<String, String> metadata);
}

public class ServiceInfo {
    private String name;
    private String groupName;
    private String clusters;
    private List<Instance> hosts;
    private long cacheMillis;
    private long lastRefTime;
    
    // Constructor and getter/setter methods
    public String getName();
    public void setName(String name);
    public List<Instance> getHosts();
    public void setHosts(List<Instance> hosts);
}

public class NacosException extends Exception {
    public static final int CLIENT_INVALID_PARAM = 400;
    public static final int CLIENT_OVER_THRESHOLD = 503;
    public static final int SERVER_ERROR = 500;
    public static final int BAD_GATEWAY = 502;
    public static final int RESOURCE_NOT_FOUND = 404;
    
    public NacosException(int errCode, String errMsg);
    public int getErrCode();
    public String getErrMsg();
}

Configuration Events

public class ConfigChangeEvent {
    private String dataId;
    private String group;
    private String namespace;
    private String content;
    private String oldContent;
    private PropertyChangeType changeType;
    
    public String getDataId();
    public String getGroup(); 
    public String getContent();
    public PropertyChangeType getChangeType();
}

public interface Listener {
    void receiveConfigInfo(String configInfo);
    Executor getExecutor();
}

Constants and Enums

public enum ConfigType {
    PROPERTIES, XML, JSON, TEXT, HTML, YAML, TOML, UNSET
}

public enum PropertyChangeType {
    ADDED, MODIFIED, DELETED
}

public class PropertyKeyConst {
    public static final String SERVER_ADDR = "serverAddr";
    public static final String NAMESPACE = "namespace";
    public static final String USERNAME = "username";
    public static final String PASSWORD = "password";
    public static final String CLUSTER_NAME = "clusterName";
    public static final String ENCODE = "encode";
}