Nacos client library for dynamic service discovery and configuration management in cloud native applications and microservices platforms
npx @tessl/cli install tessl/maven-com-alibaba-nacos--nacos-client@3.0.0Nacos 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.
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>3.0.2</version>
</dependency>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;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");
}
}Nacos client provides a multi-service architecture with clear separation of concerns:
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.
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);
}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;
}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;
}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;
}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();
}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();
}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";
}