该文档即将废弃,推荐查看用户手册-JAVA SDK-JAVA SDK 使用手册。
概述部分
Maven 坐标
注意:由于Nacos Java SDK在2.0版本后引入了gRPC,为了避免用户业务引入的gRPC版本不同导致冲突,使用了shaded技术将部分依赖直接封装进nacos-client中,导致nacos-client较大。
如果用户未自行引入gRPC或确认版本无冲突,希望使用纯净版的nacos-client以减小依赖,可以使用classifier来指定使用纯净版。
配置管理
获取配置
描述
用于服务启动的时候从 Nacos 获取配置。
请求参数
参数名 | 参数类型 | 描述 |
---|
dataId | string | 配置 ID,采用类似 package.class(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性,class 部分建议是配置的业务含义。全部字符小写。只允许英文字符和 4 种特殊字符(”.”、”:”、”-”、”_”),不超过 256 字节。 |
group | string | 配置分组,建议填写产品名:模块名(Nacos)保证唯一性,只允许英文字符和4种特殊字符(”.”、”:”、”-”、”_”),不超过128字节。 |
timeout | long | 读取配置超时时间,单位 ms,推荐值 3000。 |
返回值
请求示例
异常说明
读取配置超时或网络异常,抛出 NacosException 异常。
监听配置
描述
如果希望 Nacos 推送配置变更,可以使用 Nacos 动态监听配置接口来实现。
请求参数
参数名
|
参数类型
|
描述
|
dataId
|
string
|
配置 ID,采用类似 package.class(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性,class 部分建议是配置的业务含义。 全部字符小写。只允许英文字符和 4 种特殊字符("."、":"、"-"、"_")。不超过 256 字节。
|
group
|
string
|
配置分组,建议填写产品名:模块名(如 Nacos:Test)保证唯一性。 只允许英文字符和4种特殊字符("."、":"、"-"、"_"),不超过128字节。
|
listener
|
Listener
|
监听器,配置变更进入监听器的回调函数。
|
返回值
参数类型 | 描述 |
---|
string | 配置值,初始化或者配置变更的时候通过回调函数返回该值。 |
请求示例
删除监听
描述
取消监听配置,取消监听后配置不会再推送。
请求参数
参数名 | 参数类型 | 描述 |
---|
dataId | string | 配置 ID,采用类似 package.class(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性,class 部分建议是配置的业务含义。全部字符小写。只允许英文字符和 4 种特殊字符(”.”、”:”、”-”、”_”),不超过 256 字节。 |
group | string | 配置分组 |
listener | ConfigChangeListenerAdapter | 监听器,配置变更进入监听器的回调函数。 |
使用示例
发布配置
描述
用于通过程序自动发布 Nacos 配置,以便通过自动化手段降低运维成本。
注意:创建和修改配置时使用的同一个发布接口,当配置不存在时会创建配置,当配置已存在时会更新配置。
请求参数
参数名 | 参数类型 | 描述 |
---|
dataId | string | 配置 ID,采用类似 package.class (如 com.taobao.tc.refund.log.level )的命名规则保证全局唯一性。建议根据配置的业务含义来定义 class 部分。全部字符均为小写。只允许英文字符和 4 种特殊字符(“.”、“:”、“-”、“_”),不超过 256 字节。 |
group | string | 配置分组,建议填写产品名:模块名 (如 Nacos:Test )来保证唯一性。只允许英文字符和 4 种特殊字符(“.”、“:”、“-”、“_”),不超过 128 字节。 |
content | string | 配置内容,不超过 100K 字节。 |
type | string | @Since 1.4.1. 配置类型,见 com.alibaba.nacos.api.config.ConfigType ,默认为TEXT |
返回参数
请求示例
异常说明
读取配置超时或网络异常,抛出 NacosException 异常。
删除配置
描述
用于通过程序自动删除 Nacos 配置,以便通过自动化手段降低运维成本。
注意: 当配置已存在时会删除该配置,当配置不存在时会直接返回成功消息。
请求参数
参数名 | 参数类型 | 描述 |
---|
dataId | string | 配置 ID |
group | string | 配置分组 |
返回参数
请求示例
异常说明
读取配置超时或网络异常,抛出 NacosException 异常。
服务发现SDK
注册实例
描述注册一个实例到服务。
请求参数
名称 | 类型 | 描述 |
---|
serviceName | 字符串 | 服务名 |
ip | 字符串 | 服务实例IP |
port | int | 服务实例port |
clusterName | 字符串 | 集群名 |
instance | 参见代码注释 | 实例属性 |
返回参数
无
请求示例
注销实例
描述
删除服务下的一个实例。
请求参数
名称 | 类型 | 描述 |
---|
serviceName | 字符串 | 服务名 |
ip | 字符串 | 服务实例IP |
port | int | 服务实例port |
clusterName | 字符串 | 集群名 |
返回参数
无
请求示例
获取全部实例
描述
获取服务下的所有实例。
请求参数
名称 | 类型 | 描述 |
---|
serviceName | 字符串 | 服务名 |
clusters | List | 集群列表 |
返回参数
List<Instance> 实例列表。
请求示例
获取健康或不健康实例列表
描述
根据条件获取过滤后的实例列表。
请求参数
名称 | 类型 | 描述 |
---|
serviceName | 字符串 | 服务名 |
clusters | List | 集群列表 |
healthy | boolean | 是否健康 |
返回参数
List<Instance> 实例列表。
请求示例
获取一个健康实例
描述
根据负载均衡算法随机获取一个健康实例。
请求参数
名称 | 类型 | 描述 |
---|
serviceName | 字符串 | 服务名 |
clusters | List | 集群列表 |
返回参数
Instance 实例。
请求示例
监听服务
描述
监听服务下的实例列表变化。
请求参数
名称 | 类型 | 描述 |
---|
serviceName | 字符串 | 服务名 |
clusters | List | 集群列表 |
listener | EventListener | 回调listener |
返回参数
无
请求示例
取消监听服务
描述
取消监听服务下的实例列表变化。
请求参数
名称 | 类型 | 描述 |
---|
serviceName | 字符串 | 服务名 |
clusters | List | 集群列表 |
listener | EventListener | 回调listener |
返回参数
无
请求示例
NacosClientProperties
介绍
从 2.1.2
开始引入了 NacosClientProperties
, 一个类似于 Spring Environment
用来统一管理客户端的各种配置项. 之前客户端的配置项散落3个地方: 用户传入的 Properties、命令行参数和环境变量. 这种没有一个统一的获取配置的入口,并且不方便做配置的隔离. 基于以上的问题,引入 NacosClientProperties
.
特点
- 统一管理 Properties、命令行参数、环境变量和默认值
- 提供优先级搜索功能, 默认搜索顺序
properties -> 命令行参数 -> 环境参数 -> 默认值
, 可通过调整优先级来调整搜索顺序, 默认是 properties
优先
- 配置隔离, 每个
NacosClientProperties
对象,除去全局性的配置互不影响.
如何使用
相关概念
优先级
默认优先级是 properties
, 可通过以下2种方式来调整:
- (命令行参数)-Dnacos.env.first=PROPERTIES|JVM|ENV
- (环境变量)NACOS_ENV_FIRST=PROPERTIES|JVM|ENV
以上2种方式都指定的情况下,客户端优先使用命令行参数的方式获取优先级参数,若是通过命令行参数的方式没有获取到优先级参数则使用环境变量的方式获取优先级参数.如果以上2种方式都未指定优先级参数默认优先级为properties
默认优先级:
优先级: PROPERTIES
优先级: JVM
优先级: ENV
搜索
NacosClientProperties
会按照指定优先级进行搜索配置, 以默认优先级(PROPERTIES
)为例, 如果要获取一个 key 为
key1
的值, 查找顺序如下:
NacosClientProperties
会按照上图顺序搜索,直到查询到为止.
配置隔离
为了应对多注册中心,多配置中心的场景, NacosClientProperties
引入配置隔离的概念. 在 NacosClientProperties
中总共有4个取值源, 分别是: 用户自定义的properties、命令行参数、 环境变量和默认值, 其中 命令行参数、 环境变量和默认值
这3个是全局共享的无法做到隔离, 那么只剩下用户自定义的properties对象是可以进行隔离的, 每个 NacosClientProperties
对象中包含不同的 Properties
对象, 通过这种方法做到配置互不影响.
注意: 全局共享的配置: 命令行参数、 环境参数和默认值 一旦初始化完毕,后续使用无法更改,使用 setProperty
方法,也无法修改. setProperty
只能修改NacosClientProperties
对象中包含的 Properties
对象中的值
配置派生
在配置隔离的概念之上又引入了配置派生的概念, 其目的是让配置能够继承.所有 NacosClientProperties
对象都是由 NacosClientProperties.PROTOTYPE
对象派生而来. 无法通过其他方式创建 NacosClientProperties
对象
以上代码如下图所示:
那么搜索会怎么搜索呢? 以默认优先级(PROPERTIES)为例:
API
方法名 | 入参内容 | 返回内容 | 描述 |
---|
getProperty | key: String | String | 获取 key 对应的 value 值, 不存在返回 null |
getProperty | key: String, default: String | String | 获取 key 对应的 value 值, 不存在返回默认值 |
getBoolean | key: String | Boolean | 获取 key 对应的 Boolean 值, 不存在则返回 null |
getBoolean | key: String, default: Boolean | Boolean | 获取 key 对应的 Boolean 值, 不存在返回默认值 |
getInteger | key: String | Integer | 获取 key 对应的 Integer 值, 不存在返回 null |
getInteger | key: String, default: Integer | Integer | 获取 key 对应的 Integer 值, 不存在返回默认值 |
getLong | key: String | Long | 获取 key 对应的 Long 值, 不存在返回 null |
getLong | key: String, default: Long | Long | 获取 key 对应的 Long 值, 不存在返回默认值 |
setProperty | key: String, value: String | void | 设置 key-value 到 NacosClientProperties 对象中,已存的值会被覆盖 |
addProperties | properties: Properties | void | 添加 Properties 到 NacosClientProperties 对象中,已存在到值会被覆盖 |
containsKey | key: String | boolean | 判断是否包含指定 key 的值, 包含返回 true 否则 false |
asProperties | void | Properties | 将 NacosClientProperties 对象转换为 Properties 对象 |
derive | void | NacosClientProperties | 创建一个继承父 NacosClientProperties 所有配置的 NacosClientProperties 对象, 内部包含一个空 Properties |
derive | Properties | NacosClientProperties | 创建一个继承父 NacosClientProperties 所有配置的 NacosClientProperties 对象, 内部包含指定的 Properties 对象 |