Spring Cloud Alibaba Nacos安装+服务注册中心+服务配置中心

介绍
Nacos (Dynamic Naming and Configuration Service) 是由阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台,旨在为微服务架构提供一站式解决方案。Nacos 的核心功能包括服务注册与发现、动态配置管理和服务元数据管理,能够帮助开发者快速构建和部署微服务架构,同时提供高可用性和动态扩展能力。
核心功能
- 服务注册与发现
Nacos 作为服务注册中心,支持微服务实例的动态注册、发现与健康检查,帮助服务之间实现高效通信。 - 动态配置管理
Nacos 提供配置中心功能,支持配置的集中管理、动态更新和实时推送,无需重启服务。 - 服务元数据管理
Nacos 提供服务元数据存储功能,支持扩展服务信息的管理和查询。
安装
1. 官网下载
下载地址:Nacos 官网下载
2. 减压后在 /bin 目录下执行 startup.cmd -m standalone

3. 访问 http://localhost:8848/nacos

服务注册中心
支付服务 cloud-alibaba-payment8003
1. 引入依赖
<!-- nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 引入自定义的api通用包 -->
<dependency>
<groupId>com.zzyy.cloud</groupId>
<artifactId>cloud-common-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- SpringBoot通用依赖模块 -->
<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>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2. yml配置
server:
port: 8003
spring:
application:
name: nacos-payment-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 配置nacos地址
3. 主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Main8003 {
public static void main(String[] args) {
SpringApplication.run(Main8003.class, args);
}
}
4. 支付服务控制类 PayController
@RestController
public class PayController {
@Value("${server.port}")
private String port;
@GetMapping("/pay/nacos/{id}")
public String getPayInfo(@PathVariable("id") Integer id) {
return "nacos registry! port: " + port + "\tid: " + id;
}
}
订单服务 cloud-alibaba-order9003
1. 引入依赖
<!-- nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- web + actuator -->
<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>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2. yml配置
server:
port: 9003
spring:
application:
name: nacos-order-service
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者要去访问的微服务名称
service-url:
nacos-payment-service: http://nacos-payment-service
3. 主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Main9003 {
public static void main(String[] args) {
SpringApplication.run(Main9003.class, args);
}
}
4. RestTemplate 配置类
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced //赋予RestTemplate负载均衡的能力
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
5. 订单服务控制类 OrderController
@RestController
public class OrderController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-payment-service}")
private String payment_url;
@GetMapping("/order/pay/nacos/{id}")
public String getPayInfo(@PathVariable("id") Integer id) {
String result = restTemplate.getForObject(payment_url + "/pay/nacos/" + id, String.class, id);
return "OrderController调用返回:" + result;
}
}
测试结果
- 启动支付服务8003和订单服务9003,在 Nacos 服务列表看到 nacos-payment-service 和 nacos-order-service 都已经成功注册。
- 浏览器访问 http://localhost:9003/order/pay/nacos/123,出现 OrderController调用返回:nacos registry! port: 8003 id: 123 表示服务调用成功。


服务配置中心
Nacos配置服务 cloud-alibaba-nacos-config8877
1. 引入依赖
<!-- bootstrap -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- nacos-config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web + actuator -->
<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>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
2. application.yml 配置
server:
port: 8877
spring:
profiles:
active: dev #表示开发环境
3. bootstrap.yml 配置
# nacos配置
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
4. Nacos 配置管理
在 Nacos 配置列表新建配置

在 Nacos 中 dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix: 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
- spring.profiles.active: 即为当前环境对应的 profile。注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成
${prefix}.${file-extension} - file-exetension: 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置,目前只支持 properties 和 yaml 类型。

5. 主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Main8877 {
public static void main(String[] args) {
SpringApplication.run(Main8877.class, args);
}
}
6. 控制类 NacosConfigController
标注 @RefreshScope 注解支持 Nacos 配置的动态刷新
@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能
public class NacosConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
总结
以上主要介绍了 Nacos 安装、服务注册、服务配置的相关知识,想了解更多 Nacos 知识的小伙伴请参考 Nacos 官网 和 Spring Cloud Alibaba 官网 进行学习,学习更多 Spring Cloud 实战实用技巧的小伙伴,请关注后期发布的文章,认真看完一定能让你有所收获。
更多推荐
所有评论(0)