Nacos入门应用
一、概述
Nacos提供了统一配置管理、服务发现与注册。 其中服务注册和发现的功能,相当于dubbo里面使用到的zookeeper、 或者spring cloud里面应用到的eureka。
之前在Spring Cloud Eureka 原理中说过服务注册中心原理
服务配置中心原理
二、Nacos注册中心应用
本地启动之后,访问url: http://localhost:8848/nacos
默认的端口8848,帐号密码是:nacos/nacos
api模块中,定义接口
public interface IHelloService {
String sayHello();
}
provider模块中,实现IHelloService接口
@Service
public class HelloServiceImpl implements IHelloService{
@Override
public String sayHello() {
return "Hello GuPao";
}
}
添加 @EnableDiscoveryClient 注解
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudDubboSampleProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudDubboSampleProviderApplication.class,
args);
}
}
配置dubbo提供方信息
# dubbo 服务扫描基础包路径
dubbo.scan.base-packages=com.gupaoedu.dubbo.springclouddubbosampleprovider
dubbo.protocol.id=dubbo
# Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端
口,从 20880 开始)
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
spring.cloud.nacos.discovery.server-addr=192.168.149.128:8848
- dubbo.scan.base-packages : 指定 Dubbo 服务实现类的扫描base包
- dubbo.protocol : Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称, port 为协议端口( -1 表示自增端口,从 20880 开始)
- spring.cloud.nacos.discovery : Nacos 服务发现与注册配置,其中子属性 server-addr指定 Nacos 服务器主机和端口
服务消费者
spring.application.name=spring-cloud-dubbo-sample-consumer
dubbo.application.name=spring-cloud-dubbo-sample-consumer
dubbo.cloud.subscribed-services=spring-cloud-dubbo-sample-provider
spring.cloud.nacos.discovery.server-addr=192.168.149.128:8848
除应用名称 spring.application.name 存在差异外, spring-cloud-dubbo-client-sample 新
增了属性 dubbo.cloud.subscribed-services
的设置。并且该值为服务提供方应用 “springcloud-dubbo-sample-provider”。
它的主要作用是服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 “,” 分割。
不推荐使用默认值为 “*”,它将订阅所有应用。
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudDubboSampleConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudDubboSampleConsumerApplication.class,args);
}
@Reference
IHelloService helloService;
@GetMapping("/say")
public String say(){
return helloService.sayHello();
}
}
pom依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.gupaoedu.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>spring-cloud-dubbo-sample-api</artifactId>
</dependency>
<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>
三、Nacos配置中心应用
添加jar包依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
bootstrap.properties
需要注意,配置中心的ip,需要放在bootstrap.properties文件中,因为需要保证优先级。
spring.cloud.nacos.config.server-addr=192.168.149.128:8848
自动更新配置
@RefreshScope
@RestController
public class NacosController {
@Value("${info:hello Nacos}")
private String info;
@GetMapping("/get")
public String get(){
return info;
}
}
dataId 可以认为是一个配置集,一个系统可以有多个配置集,一般我们可以使用包名来命名,从而很好的达到数据分类的目的groupId 配置分组,这个和dataId类似,但是它的纬度更高一些,可能是基于项目层面进行划分
测试过程
- 启动服务,访问http://localhost:8080/get ,浏览器会显示info的默认值,因为这个时候nacos还没有配置info的key
- 进入控制台,增加配置,dataid=example,groupid=spring-cloud-dubbo-sample-provider, 并且增加 info = xx的value属性
- 再次刷新url,就可以读取到值的变化
Nacos Config配置解释
在 Nacos Spring Cloud 中, dataId 的完整格式如下: ${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix 来配置
- spring.profiles.active 即为当前环境对应的 profile(dev、sit、prd)注意:当spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成
${prefix}.${file-extension}
- file-exetension 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型