一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos=Naming+Configuration的前两个字母,最后的s为service
Nacos= Eureka +Config + Bus
官网:https://nacos.io/zh-cn/
git地址: https://github.com/alibaba/Nacos
手册: https://nacos.io/zh-cn/docs/what-is-nacos.html
gitee急速云代理: https://gitee.com/mirrors/Nacos?_from=gitee_search
下载
https://gitee.com/mirrors/Nacos/releases
选择1.2.1
版本,下载完源码之后:
mvn -Prelease-nacos clean install -U
安装
需要java8+maven
环境
运行–windows
cmd startup.cmd
登录访问
http://localhost:8848/nacos/#/login
nacos/nacos
pom.xml
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
application.yaml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
### 多网卡时,选择某一网段地址 指定客户端ip
## @see SimpleDiscoveryClientAutoConfiguration
inetutils:
preferred-networks: 192.1.
management:
endpoint:
web:
exposure:
include: "*"
主类
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class Client1Application {
public static void main(String[] args) {
SpringApplication.run(Client1Application.class, args);
}
@Value("${server.port}")
private int serverPort;
@RequestMapping("/echo")
public String echo() {
return serverPort+"::"+LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}
}
消费者端口配置9999
服务端接口
@RestController
public class CallRemoteController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/call")
public String call() {
String msg = restTemplate.getForEntity("http://nacos-payment-provider/echo", String.class).getBody();
return "Call : " + msg;
}
}
部署成功之后nacos
服务列表:
负载均衡
Nacos-discovery自带了Ribbon负载均衡,只需开启@LoaderBalance RestTemplate
即可。
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
nacos配置权重
客户端调用服务提供方,会按照上述的权重比例调用不同的服务实例。
pom.xml
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-nacos-discoveryartifactId>
dependency>
bootstrap.yaml
server:
port: 3377
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
## 指定配置文件的格式
file-extension: yaml
management:
endpoint:
web:
exposure:
include: "*"
application.yaml
spring:
profiles:
active: dev
Controller验证类
@RestController
@RefreshScope
public class ConfigController {
@Value("${config.info}")
private String configInfo;
@RequestMapping("/config/info")
public String info() {
return configInfo;
}
}
dataId格式
${prefix}-${spring.profile.active}.${file-extension}
prefix
默认为 spring.application.name
的值,也可以通过配置项 spring.cloud.nacos.config.prefix
来配置。spring.profile.active
即为当前环境对应的 profile。注意:当 spring.profile.active
为空时,对应的连接符 -
也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
**file-exetension
为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension
来配置。目前只支持 properties
和 yaml
类型。根据上述的规则:配置文件名称为
nacos-config-dev.yaml
nacas增加配置文件
启动客户端,访问http://localhost:3377/config/info
,页面显示上文的配置信息。
动态刷新
直接在nacos
配置界面,编辑后发布即可。
Namespace
: 保留值为public
-----用于区分部署环境Group
: 保留值为DEFAULT_GROUP
---- 可以把不同的微服务,划分到同一个分组里。Cluster
: 默认是DEFAULT
— 给指定的微服务设置一个虚拟划分
,比如为了容灾设置广州-GZ
机房,杭州-HZ
机房Instance
: 微服务实例使用默认的命名空间+默认的分组,在nacas配置两个DataId,
nacos-config-dev.yaml
nacos-config-test.yaml
后通过spring.profile.active
来获取指定的 配置。
在nacos中增加DEV_GROUP
和TEST_GROUP
.
在bootstrap.yaml
中设置group配置即可
spring:
application:
name: nacos-config
cloud:
nacos:
config:
server-addr: localhost:8848
## 指定配置文件的格式
file-extension: yaml
### 设置分组..
group: TEST_GROUP
在bootstrap.yaml
中设置namespace配置即可
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
## 指定配置文件的格式
file-extension: yaml
## 指定namespcae
namespace: 76008f08-5ca1-4448-83c1-3047fc8bb9ef
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
默认Nacos使用嵌入式数据库实现数据的存储(derby
),所以如果启动多个默认配置下的nocas,数据存储是存在一致性问题的。为了解决这个问题,Nacos使用了集中式存储的方式支持集群部署,目前只支持mysql