springcloud 集成nacos注册中心 【springcloud系列2】-爱代码爱编程
SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。
程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发
Nacos 官网 https://nacos.io/zh-cn/
使用 nacos
1 引入依赖 注册服务
父工程的pom文件中的<dependencyManagement>
中引入SpringCloudAlibaba的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2020.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在user-service和order-service的application.yml中添加nacos地址:
spring:
cloud:
nacos:
server-addr: localhost:8848
然后启动 user-service
然后在 nacos 注册中心查看注册服务
2 Nacos配置管理
当微服务部署的实例越来越多,我们可以通过 nacos 统一管理配置,集中管理所有实例的配置。
在nacos中添加配置文件
Data ID : user-service-dev.yaml -> [配置文件ID]-[profile].[后缀名]
然后在 user-service 微服务中要拉取nacos中管理的配置,并且与本地的application.yml配置合并。
在 user-service 服务的 resources 目录下创建 配置文件 bootstrap.yaml
spring:
application:
name: '@project.name@' # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
然后在 user-service 服务项目的 pom.xml 中添加配置如下 :
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
从springboot 2.4以后,就默认不加载bootstrap配置文件了,所以需要添加以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
然后在 UserController 中读取配置
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
//远程配置中的作者名称
@Value("${auth.name}")
private String authName;
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/{id}")
public UserInfo queryById(@PathVariable("id") Long id) {
log.info("当前nacos 远程配置 authName {}",authName);
log.info("查询用户信息 port {}",serverPort);
return userService.queryById(id);
}
}
3 Nacos 配置热更新
配置文件中的属性值修改后,对应微服务中读取的值也相应的修改,方式一就是在@Value注入的变量所在类上添加注解@RefreshScope:
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
@Resource
private UserService userService;
@Value("${auth.name}")
private String authName;
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/{id}")
public UserInfo queryById(@PathVariable("id") Long id) {
log.info("当前nacos 远程配置 authName {}",authName);
log.info("查询用户信息 port {}",serverPort);
return userService.queryById(id);
}
}
或者使用 @ConfigurationProperties 注解
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "auth")
public class NocasProperties {
private String name;
}
SpringCloud 微服务基本工程搭建完成
本文章是系列文章,代码过多,可以查看源码如下:
https://gitee.com/android.long/spring-cloud-biglead/tree/master/biglead-api-02-nacos
有兴趣可以关注一下 公众号 biglead