一:Nacos的认识和安装
1.概念
官方定义:
Nacos致力于帮助您发现,配置和管理微服务。它提供了一组简单有用的功能,使您能够实现动态服务发现,服务配置,服务元数据和流量管理。 Nacos使构建,交付和管理微服务平台变得更容易,更快捷。它是通过微服务或云原生方法支持以服务为中心的现代应用程序体系结构的基础架构。
这里我们看到Nacos不仅是服务发现组件,同时也是一个配置管理组件,也就是说它不仅可以用来取代Eureak作为注册中心, 也可以用来取代Spring Cloud Config 做配置统一管理。本篇文章意在探讨Nacos的服务注册与发现功能。
2.安装
下载地址:Releases · alibaba/nacos · GitHub
启动Nacos:解压后,
-
windows执行bin目录下的startup命令 :startup.cmd -m standalone
-
linux 执行 :sh startup.sh -m standalone
访问Nacos,端口8848:http://127.0.0.1:8848/nacos/index.html ,用户名和密码都是:nacos
3.基于数据库持久化Nacos
找到nacos安装目录config/application.properties 文件,编辑数据库信息,修改内容如下,user和password就看自己怎么设置的
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
二:项目搭建
我们这里要演示的案例是两个服务的通信,用户服务(service-user)作为服务提供者需要编写接口返回User实体对象,订单服务(service-order)作为消费者需要调用用户服务获取User实体对象,浏览器调用订单服务,订单服务调用用户服务或到User实体后返回给容器,用户和订单都注册到Nacos中,如下:
注意:这里的订单服务和用户服务都用到了User实体,所以为了让User实体共用,我们为User实体抽取了一个公共的user-common模块,用户服务和订单服务都去依赖这个模块即可使用User实体。
搭建父工程,导入依赖,创建user服务模块,order订单模块,user的公共模块
<!--1.管理 SpringBoot的jar包-->
<!--SpringBoot-->
<parent>
<groupId> org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!--2.管理 SpringCloud的jar包
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--3.这里是所有子项目都可以用的jar包-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--小辣椒-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
将服务注册到Nacos
1.在user服务导入依赖
<dependency>
<groupId>com.alibaba.cloud </groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--加入WEB依赖是为了方便后面写Controller-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.lqf</groupId>
<artifactId>springcloud-alibaba-pojo-user</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
2.配置启动类
创建配置类加上@EnableDiscoveryClient注解开启服务发现功能,代码如下
@SpringBootApplication
@EnableDiscoveryClient //开启服务发现功能
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class);
}
}
3.配置yml文件
server:
port: 10010
spring:
application:
name: service-user
cloud:
nacos:
discovery:
server-addr: localhost:8848 #注册中心地址
4.启动测试
启动服务提供者,观察Nacos服务列表 , service-user已经注册进去了
5.服务通信
可以使用Ribbon,OpenFeign,甚至Dubbo,使用方式和在SpirngCloudNetflix中没有任何区别。
三:Nacos配置管理
1.Nacos配置中心
第一步:打开Nacos监控面板 - 进入配置列表 -点击 “+” 图标添加配置 如下:
第二步:填写Data ID,选择YAML,编辑配置文件内容
配置内容就是后端在application.yml写的内容
Data ID
: 非常重要,可以看做是配置的文件的名字,在程序中拉取配置文件的时候需要指定Data ID。
Group
: 分组,默认是 DEFAULT_GROUP , 可以针对不同的项目指定不同的配置组。
2.客户端接入配置中心
2.1 在user服务导入依赖
<!-- 配置中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.2 编写user的controller
@RefreshScope //刷新配置
@RestController
public class UserController {
@Value("${temp.notify}")
private String notify;
@GetMapping("/user/{id}")
public User getById(@PathVariable Long id){
return new User(id,"user", "法外狂徒张三:"+notify);
}
}
2.3 将application.yml删除,创建bootstrap.yml文件
spring:
profiles:
active: dev #环境
cloud:
nacos:
config:
server-addr: localhost:8848 #端口号
file-extension: yaml #后缀
prefix: application-user #前缀
2.4 测试就可以了
启动Nacos,启动 springcloud-alibaba-service-user 工程 , 修改Nacos中的配置文件内容,然后访问 http://localhost:10010/user/1
,观察控制台打印的 “notify”的值会发生变化。
2.5 注意细节
1.云端配置文件的后缀应该是 yaml而不是yml
2.客户端配置需要指定:spring.profiles.active=dev 环境名
3.客户端配置 :前缀 + 环境名 + 后缀应该和云端配置文件的DataId一致
那就先告一段落了,路漫漫其修远兮,吾将上下而求索,学无止境啊