官网文档 仓库地址
一。下载安装运行
安装方式一:下载源码编译运行
git clone https: / / github. com/ alibaba/ nacos. git
cd nacos/
mvn - Prelease - nacos - Dmaven . test. skip= true clean install - U ls - al distribution/ target/
cd distribution/ target/ nacos- server- $version/ nacos/ bin
安装方式二:下载压缩包解压方式
https: / / github. com/ alibaba/ nacos/ releases
unzip nacos- server- $version. zip 或者 tar - xvf nacos- server- $version. tar. gz
运行nacos服务:
linux: sh startup. sh - m standalone
Windows :cmd 输入 startup. cmd - m standalone
访问:http: / / localhost: 8848 / nacos 账号:nacos 密码:nacos
关闭nacos服务
Linux / Unix / Mac sh shutdown. sh
Windows shutdown. cmd 或者双击shutdown. cmd运行文件。
二。服务注册&发现和配置管理
服务注册
curl - X POST 'http: / / 127.0 .0 .1 : 8848 / nacos/ v1/ ns/ instance? serviceName= nacos. naming. serviceName& ip= 20.18 .7 .10 & port= 8080 '
服务发现
curl - X GET 'http: / / 127.0 .0 .1 : 8848 / nacos/ v1/ ns/ instance/ list? serviceName= nacos. naming. serviceName'
发布配置
curl - X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
获取配置
curl - X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
三。微服务注册到nacos
1. pom引入依赖
< dependency>
< groupId> com. alibaba. cloud< / groupId>
< artifactId> spring- cloud- starter- alibaba- nacos- discovery< / artifactId>
< version> 2.2 .4 . RELEASE < / version>
< / dependency>
2. yml指定微服务名称和注册中心
spring:
application:
name: mock
cloud:
nacos:
discovery:
server- addr: localhost: 8848
namespace: 命名空间id
3. 主启动类加注解@EnableDiscoveryClient , 也可不用加
4. 访问nocos服务列表看是否有这个服务 http: / / localhost: 8848 / nacos
四。服务的配置文件写在nacos config里面
1. pom引入依赖
< dependency>
< groupId> com. alibaba. cloud< / groupId>
< artifactId> spring- cloud- starter- alibaba- nacos- config< / artifactId>
< version> 2.2 .4 . RELEASE < / version>
< / dependency>
2. nacos页面添加配置文件,dataid为配置文件名称,为b步骤里面的服务名称+ 后缀
3. 主启动类加注解@EnableDiscoveryClient , 也可不用加
4. resources下添加bootstrap. yml文件(application. yml文件就可以去掉)
spring:
cloud:
nacos:
discovery:
server- addr: localhost: 8848 #配置中心地址
config:
file- extension: yml #配置文件后缀
extension- configs:
- data- id: config- service. yml #配置文件
group: ENERGY_GROUP
- data- id: xxl- job. yml
group: ENERGY_GROUP
refresh: true
application:
name: mockConfig #服务名称
profiles:
active: dev, prod #项目中哪些bootstrap. yml生效
spring- Cloud - nacos- config- server- adds:配置中心地址
spring. application. name: 配置名称
spring. cloud. nacos. config. file- extesion 后缀yaml
spring. profiles. active: dev active- profile test- dev. yaml
spring. cloud. nacos. namespace: 命名空间( 在nacos里面查看) 这个空间下的配置文件
spring. cloud. nacos. config. group: 这个分组下的配置文件
一次启动多个配置redis mybatis等
spring. cloud. nacos. config. extensionsConfigs[ 0 ] . data- id: redis. yml, mybatis. yml
spring. cloud. nacos. config. extensionsConfigs[ 0 ] . group:
spring. cloud. nacos. config. extensionsConfigs[ 0 ] . refresh:
spring. cloud. nacos. config. extensionsConfigs[ 1 ] . data- id: redis. yml, mybatis. yml
spring. cloud. nacos. config. extensionsConfigs[ 1 ] . group:
spring. cloud. nacos. config. extensionsConfigs[ 1 ] . refresh:
通用配置
spring. cloud. nacos. config. shared- dataids:
spring. cloud. nacos. config. refreshable- dayside: 动态刷新,配置中心改了,程序自动感应刷新
如果多个配置文件有相同内容,加载优先级
名称- profile- 后缀
名称- 后缀
应用名称
大于扩展
大于共享
五。Java SDK读取nacos上配置文件的内容
private void readNacosConfig ( ) throws NacosException {
Properties properties = new Properties ( ) ;
properties. put ( PropertyKeyConst . SERVER_ADDR , "127.0.0.1:8848" ) ;
properties. put ( PropertyKeyConst . NAMESPACE , "public" ) ;
ConfigService configService = NacosFactory . createConfigService ( properties) ;
String content = configService. getConfig ( "configFileName-dev.yml" , "DEFAULT_GROUP" , 3000L ) ;
System . out. println ( content) ;
}
@Configuration
@Slf4j
public class NacosConfig {
private ConfigService configService;
public String getFileContent ( String dataId, String group) {
try {
return configService. getConfig ( dataId, group, 5000 ) ;
} catch ( NacosException e) {
log. info ( "获取配置文件:{} 的内容失败" , dataId) ;
}
return null ;
}
@PostConstruct
public ConfigService getConfigService ( ) {
if ( configService == null ) {
try {
Properties properties = System . getProperties ( ) ;
properties. setProperty ( "serverAddr" , System . getProperty ( Constants . NACOS_CONFIG_ADDR_KEY ) ) ;
properties. setProperty ( "username" , System . getProperty ( Constants . NACOS_CONFIG_USERNAME_KEY ) ) ;
properties. setProperty ( "password" , System . getProperty ( Constants . NACOS_CONFIG_PASSWORD_KEY ) ) ;
properties. setProperty ( "contextPath" , System . getProperty ( Constants . NACOS_CONFIG_CONTEXT_PATH_KEY ) ) ;
properties. setProperty ( "namespace" , System . getProperty ( Constants . NACOS_CONFIG_NAMESPACE_KEY ) ) ;
configService = ConfigFactory . createConfigService ( properties) ;
return configService;
} catch ( Exception e) {
log. error ( "初始化 nacos nameService 异常: " , e) ;
return null ;
}
}
return configService;
}
}
六、配置文件的默认值写法
server:
port: ${ SERVER_PORT : 8082 }
spring:
datasource:
url: 'jdbc: mysql: / / ${ MYSQL_MASTER_SERVER : 10.240 .3 .140 : 12806 } / energy_pile_bill? useLegacyDatetimeCode= false & serverTimezone= Asia / Shanghai & useSSL= false & characterEncoding= utf8'
username: ${ MYSQL_USERNAME : admin}
password: ${ MYSQL_PASSWORD : QXV0ZWxFbmUqIw == }
@Value ( value = "${ceph.external.domain: https://s3.cn-northwest-1.amazonaws.com.cn/default.enewbdevcn/}" )
private String logoPathPrefix;