前几天学习了Nacos,记录一下
Nacos是一个服务发现组件,也是用来管理微服务的配置
引入依赖
先将SpringBoot项目引入SpringCloud,在pom文件中引入
<dependencyManagement>
<!--整合SpringCloud-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
引入Nacos依赖,这里不需要指定版本,因为在spring-cloud-alibaba-dependencies下已经指定了版本
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
搭建Nacos Serve
下载对应版本的Nacos Server,跟spring-cloud-alibaba-dependencies版本保持一致,这也是为了生产环境下的稳定。
下载地址
下载好之后可以到Nacos查看文档。
Windows下cmd命令到nacos文件夹下的bin路径下,然后执行startup.cmd就可以启动Nacos了。
浏览器访问:http://localhost:8848/nacos,账号密码都是nacos
在配置文件中进行配置:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
name: user-center
server:
port: 8081
启动项目之后就可以在控制台-服务列表查看注册上来的某个微服务了,这里必须要在spring的配置中配置:spring.application.name,不然的话项目是启动不起来的,控制台的服务名就是配置的名称
再启动另一个端口的程序,点击详情就可以看到他集群下的微服务实例
领域模型
Namespace:实现隔离,默认是public
Group:不同服务可以分到一个组,默认DEFAULT_GROUP
Serbice:微服务
Cluster:集群,可以用于容灾
Instance:微服务实例
配置集群的名称,cluster-name: XXX,具体如下:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
cluster-name: BJ
metadata:
haha: hehe
csea: ccc
application:
name: user-center
server:
port: 8081
这个时候,这个微服务就在BJ的这个集群下了
命名空间
还可以在nacos的控制台创建新的空间
创建之后就会有一个命名空间ID,拿这个ID在项目中进行配置,那个这个程序就会在这个空间下了
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
cluster-name: BJ
namespace: 9b74b8d1-94ba-44ea-955b-2e174d42a14a
metadata:
haha: hehe
csea: ccc
application:
name: user-center
server:
port: 8081
一个服务能找到另一个服务
我这里已经准备好了2个集成了Nacos并且注册到Nacos Server的微服务,接下来测试一个微服务能获取到另一个微服务的所有实例的地址信息
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("test2")
public List<ServiceInstance> getInstances() {
// 查询指定服务的所有实例的信息
return this.discoveryClient.getInstances("user-center");
}
如果将微服务停止,那是获取不到的
除了Nacos可以作为服务发现组件,还有consul/eureka/zookeeper
元数据
Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。
级别: 服务级别,集群级别,实例级别
作用:
- 描述微服务
- 微服务调用更灵活(如版本控制)
比如V1版本的程序只能调用其他版本的V1程序,同理V2
元数据的配置,是以键值对的形式配置:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
metadata:
haha: hehe
csea: ccc
application:
name: user-center
server:
port: 8081
除了配置的方式,也可以在控制台设置