GitHub下载地址:Tags · alibaba/nacos (github.com)
下载安装都十分简单,下载下来解压,然后到bin目录运行那个startup文件即可。
GitHub开始介绍的使用方式
On the Linux/Unix/Mac platform, run the following command to start server with standalone mode:
sh startup.sh -m standalone
On the Windows platform, run the following command to start server with standalone mode. Alternatively, you can also double-click the
startup.cmd
to run NacosServer.startup.cmd -m standalone
官网快速开始教程:Quick Start for Nacos
官方网站:home (nacos.io)
官方的示例控制台模样:
spring cloud Alibaba版本依赖可以去alibaba的github仓库的wiki查看:版本说明 · alibaba/spring-cloud-alibaba Wiki (github.com)
我这里用的spring cloud Hoxton版本所以依照官方文档的提示,我应该使用spring-cloud-alibaba-dependencies-2.2.6.RELEASE,也就是2.2.6.RELEASE版本的依赖。
如果需要使用 Spring Cloud Hoxton 版本,请在 dependencyManagement 中添加如下内容
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2.2.6.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
官方网站GitHub:Nacos discovery · alibaba/spring-cloud-alibaba Wiki (github.com)
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
根据官网文档,nacos暴露的端口是8848
server:
port: 8300
spring:
application:
name: nacos-order-producer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos-server的地址
management:
endpoints:
web:
exposure:
include: *
跟普通的服务发现应用一样,用注解@EnableDiscoveryClient
开始服务发现功能。
@SpringBootApplication
@EnableDiscoveryClient //开启服务发现
public class NacosProviderDemoApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProducerDemoApplication.class, args);
}
}
@RestController
public class EchoController {
@GetMapping(value = "/echo/{string}")
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
消费者这边的配置跟生产者的配置没有什么太多改变
server:
port: 8301
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos-server的地址
nacos内置了ribbon做均匀负载,所以我们消费端使用ribbon做均匀负载。
创建RestTemplate的bean时,在上面添加@LoadBalanced
注解。以开启均匀负载功能。
@Configuration
public class TemplateConfig {
@Bean("restTemplate")
@LoadBalanced
public RestTemplate getrestTemplate(){
return new RestTemplate();
}
}
通过服务名调用消费端提供的服务,因为加了@LoadBalanced
开启了均匀负载。
@RestController
@Slf4j
public class OrderController {
private static final String PAMENT_URL = "http://nacos-order-producer";
@Resource
private RestTemplate restTemplate;
@GetMapping("/comsumer/echo/{string}")
public String create(@PathVariable String string){
return restTemplate.getForObject(PAMENT_URL+"/echo/"+string,String.class);
}
}
nacos除了使服务发现功能外还能作为配置中心进行工作。
一点要使用bootstrap.yaml或者bootstrap.properties,bootstrap为系统级别的配置文件,优先级高最先加载,并且不会被application覆盖。
这里配置nocas server的地址即可。
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=example
#spring.cloud.nacos.config.file-extension: yaml #配置获取文件的后缀
spring.profiles.active=dev
根据官网的信息,如何定位要想要的配置文件呢,通过一些dataId
去定位获取。
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
根据官网的提示,nacos是会自动广播刷新配置的,我们利用spring cloud@RefreshScope
注解进行配置刷新的验证。nacos相比传统的spring cloud bus +spring cloud config要好用很多。
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
nocos有自己定义识别数据空间,可以通过三个维度的定位锁定指定的唯一的数据或配置文件。里面有写数据模型的结构:Nacos 架构
这里简单简述就是:命名空间(Namespace),分组(Group),数据ID(Service/DataId)
通过Namespace+Group+DataId锁定唯一的资源。如下配置:
#锁定资源nacos命名空间下的order分组下的nacos-order-consumer-dev.yaml文件
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yaml
group: order
namespace: nacos
profiles:
active: dev