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中添加依赖
| 12
 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
| 12
 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

| 12
 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开启服务注册与发现

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

| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | @RestControllerpublic 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
| 12
 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的微服务提供者,可以不配置)

| 12
 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

| 12
 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,开启负载均衡

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

| 12
 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

| 12
 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不支持
| 12
 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

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


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


主启动类
创建NacosConfigClientMain3377

| 12
 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实现配置自动更新

| 12
 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。
| 12
 
 | 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

| 12
 
 | config:info: nacos-config-client-info.yaml,DEV_GROUP
 
 | 

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

| 12
 
 | 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
| 12
 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
| 12
 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

| 12
 
 | 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

添加数据库配置

| 12
 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
