Nacos作为服务注册中心
配置项 |
Key |
默认值 |
说明 |
服务端地址 |
spring.cloud.nacos.discovery.server-addr |
无 |
Nacos Server 启动监听的ip地址和端口 |
服务名 |
spring.cloud.nacos.discovery.service |
${spring.application.name} |
给当前的服务命名 |
服务分组 |
spring.cloud.nacos.discovery.group |
DEFAULT_GROUP |
设置服务所处的分组 |
权重 |
spring.cloud.nacos.discovery.weight |
1 |
取值范围 1 到 100,数值越大,权重越大 |
网卡名 |
spring.cloud.nacos.discovery.network-interface |
无 |
当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 |
注册的IP地址 |
spring.cloud.nacos.discovery.ip |
无 |
优先级最高 |
注册的端口 |
spring.cloud.nacos.discovery.port |
-1 |
默认情况下不用配置,会自动探测 |
命名空间 |
spring.cloud.nacos.discovery.namespace |
无 |
常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 |
AccessKey |
spring.cloud.nacos.discovery.access-key |
无 |
当要上阿里云时,阿里云上面的一个云账号名 |
SecretKey |
spring.cloud.nacos.discovery.secret-key |
无 |
当要上阿里云时,阿里云上面的一个云账号密码 |
Metadata |
spring.cloud.nacos.discovery.metadata |
无 |
使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息 |
日志文件名 |
spring.cloud.nacos.discovery.log-name |
无 |
|
集群 |
spring.cloud.nacos.discovery.cluster-name |
DEFAULT |
配置成Nacos集群名称 |
接入点 |
spring.cloud.nacos.discovery.enpoint |
UTF-8 |
地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |
是否集成Ribbon |
ribbon.nacos.enabled |
true |
一般都设置成true即可 |
是否开启Nacos Watch |
spring.cloud.nacos.discovery.watch.enabled |
true |
可以设置成false来关闭 watch |
服务提供者
新建Modulecloudalibaba-provider-payment9001

pom
父模块的pom中添加依赖
1 2 3 4 5 6 7 8
| <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
|
本模块中导入spring-cloud-starter-alibaba-nacos-discovery
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> </dependencies>
|
yml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| server: port: 9001
spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848
management: endpoints: web: exposure: include: '*'
|
主启动类
创建PaymentMain9001
,使用@EnableDiscoveryClient
开启服务注册与发现

1 2 3 4 5 6 7 8
| @EnableDiscoveryClient @SpringBootApplication public class PaymentMain9001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class,args); } }
|
controller
创建PaymentController

1 2 3 4 5 6 7 8 9 10 11 12 13
| @RestController public class PaymentController { @Value("${server.port}") private String serverPort;
@GetMapping(value = "/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id) { return "nacos registry, serverPort: "+ serverPort+"\t id"+id; } }
|
测试
启动Nacos Server 9001,访问http://localhost:8848/nacos/
查看服务列表

注册成功!
访问http://localhost:9001/payment/nacos/1
运行成功

为了展示nacos的负载均衡,参照9001新建9002,只有配置文件端口号不同,主启动类名不同

启动运行,查看是否注册

点击详情查看

注册成功!
访问http://localhost:9002/payment/nacos/1
程序运行成功

服务消费者
新建模块cloudalibaba-consumer-nacos-order83

pom
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.kylin</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
|
为什么nacos支持负载均衡?因为nocos-discovery集成了ribbon

yml
service-url.nacos-user-service
值为消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者,可以不配置)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| server: port: 83
spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848
service-url: nacos-user-service: http://nacos-payment-provider
|
主启动类
创建OrderNacosMain83

1 2 3 4 5 6 7 8
| @EnableDiscoveryClient @SpringBootApplication public class OrderNacosMain83 { public static void main(String[] args) { SpringApplication.run(OrderNacosMain83.class,args); } }
|
RestTemplate
编写RestTemplate配置类ApplicationContextBean
,开启负载均衡

1 2 3 4 5 6 7 8 9 10
| @Configuration public class ApplicationContextBean {
@Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
|
controller
编写OrderNacosController

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @RestController @Slf4j public class OrderNacosController { @Resource private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}") private String serverURL;
@GetMapping(value = "/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) { return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class); }
}
|
测试
启动9001 9002 83 Nacos Server

访问http://localhost:8848/nacos/
查看服务列表

服务注册成功!
访问http://localhost:83/consumer/payment/nacos/13

轮询负载成功!
Nacos作为服务配置中心演示
基础配置
新建cloudalibaba-config-nacos-client3377
pom

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.kylin</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
|
yml
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,来取配置之后,才能保证项目的正常启动。
springboot中的配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
说明:之所以需要配置 spring.application.name
,是因为它是构成 Nacos 配置管理 dataId
字段的一部分。
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
1
| ${prefix}-${spring.profile.active}.${file-extension}
|
prefix
默认为 spring.application.name
的值,也可以通过配置项 spring.cloud.nacos.config.prefix
来配置。
spring.profile.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active
为空时,对应的连接符 -
也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension
来配置。目前只支持 properties
和 yaml
类型。
bootstrpa.yml

yaml不能简写为yml,nacos不支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| server: port: 3377
spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 config: server-addr: localhost:8848 file-extension: yaml
|
注意:当 spring.profile.active
为空时,对应的连接符 -
也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
如果没有配可能发生一些错误
application.yml

1 2 3
| spring: profiles: active: dev
|
Nacos Server中添加nacos-config-client-dev.yaml
配置文件


1 2
| config: info: from nacos config center,nacos-config-client-dev.yaml,version=1
|
点击发布


主启动类
创建NacosConfigClientMain3377

1 2 3 4 5 6 7 8
| @EnableDiscoveryClient @SpringBootApplication public class NacosConfigClientMain3377 { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain3377.class, args); } }
|
controller
通过Spring Cloud原生注解@RefreshScope
实现配置自动更新

1 2 3 4 5 6 7 8 9 10 11 12 13
| @RestController
@RefreshScope public class ConfigClientController { @Value("${config.info}") private String configInfo;
@GetMapping("/config/info") public String getConfigInfo() { return configInfo; } }
|
测试
启动前需要在nacos客户端-配置管理-配置管理栏目下有没有对应的yaml配置文件,运行cloud-config-nacos-client3377的主启动类

访问http://localhost:3377/config/info

修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。修改version为2


确认发布

再次访问http://localhost:3377/config/info
,更新成功!

分类配置
概念。。。
DataID方案
默认空间+默认分组+新建dev和test两个DataID,dev我们已经创建好了,创建nacos-config-client-test.yaml
。
1 2
| config: info: from nacos config center,nacos-config-client-test.yaml,version=1
|


通过spring.profile.active
属性就能进行多环境下配置文件的读取

此时读取的就是nacos-config-client-test.yaml
文件config.info
测试,重新启动3377,访问http://localhost:3377/config/info

Group方案
通过Group实现环境区分,新建GroupDEV_GROUP
,nacos-config-client-info.yaml

1 2
| config: info: nacos-config-client-info.yaml,DEV_GROUP
|

同样再次创建nacos-config-client-info.yaml
Group为TEST_GROUP

1 2
| config: info: nacos-config-client-info.yaml,TEST_GROUP
|

修改配置文件spring.cloud.nacos.config.group
配置group,默认为DEFAULT_GROUP

通过配置读取配置中心中的TEST_GROUP分组下的nacos-config-client-info.yaml文件
bootstrap.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| server: port: 3377
spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 config: server-addr: localhost:8848 file-extension: yaml group: TEST_GROUP
|
applicaiton.yml
1 2 3 4 5
| spring: profiles: active: info
|
测试,重新启动3377,访问http://localhost:3377/config/info

修改group为DEV_GROUP

测试,重新启动3377,访问http://localhost:3377/config/info

成功!
Namespace方案
新建dev/test的Namespace




分别带有各自的命名空间ID
回到服务管理-服务列表查看

点击dev

新建nacos-config-client-dev.yaml

1 2
| config: info: 1e849be4-14fe-450d-8da9-8bb25413ac5f dev namespace
|

修改配置文件spring.cloud.nacos.config.namespace
配置命名空间ID

测试,重新启动3377,访问http://localhost:3377/config/info

Nacos持久化配置解释
Nacos默认自带的是嵌入式数据库derby,官方源代码中的pom中可以看出引入了

derby到mysql切换配置步骤
nacos-server-1.1.4\nacos\conf目录下找到sql脚本sql语句源文件


创建nacos_config

复制运行sql语句


接着nacos-server-1.1.4\nacos\conf目录下找到application.properties

添加数据库配置

1 2 3 4 5 6
| spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=数据库密码
|
重新启动nacos,可以看到是个全新的空记录界面


Linux安装Nacos
https://github.com/alibaba/nacos/releases/tag/1.1.4
下载后发送到服务器的/opt
目录,使用tar -zxvf nacos-server-1.1.4.tar.gz
解压

解压成功后得到nacos
目录复制到/mynacos
使用cp -r nacos /mynacos
