003-服务发现-Nacos
banner 2022-01-06 11:11:46 微服务SpringCloudSpringCloudAlibabaNacos
# 一、官网 (opens new window)
# 二、下载 (opens new window)
根据spring-cloud-alibaba-dependencies-0.9.0.RELEASE.pom
可以查看要下载的Nacos版本。
# 三、使用Docker安装Nacos
docker pull nacos/nacos-server:1.0.1
docker run -d -p 8848:8848 --env MODE=standalone --name nacos nacos/nacos-server:1.0.1
1
2
2
登录管理后台
http://localhost:8848/nacos (opens new window)
默认账号密码:nacos / nacos
# 四、注册服务
# 4.1 导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1
2
3
4
2
3
4
# 4.2 增加配置
spring:
cloud:
nacos:
discovery:
# 指定Nacos Server服务地址
server-addr: localhost:8848
application:
# 指定服务名称
name: user-center
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
2021-12-11 00:38:55.847 INFO 50793 --- [ main] o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, user-center 192.168.31.208:8088 register finished
1
2
2
/**
* 测试:服务发现,证明内容中心总能找到用户中心
*
* @return 用户中心所有实例的地址信息
*/
@GetMapping("/test2")
public List<ServiceInstance> getInstances() {
// 查询指定服务的所有实例的信息
// consul/eureka/zookeeper...
return this.discoveryClient.getInstances("user-center");
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
启动user-center后,请求 http://localhost:8010/test2
[
{
"serviceId": "user-center",
"host": "192.168.31.208",
"port": 8088,
"secure": false,
"metadata": {
"nacos.instanceId": "192.168.31.208#8088#NJ#DEFAULT_GROUP@@user-center",
"nacos.weight": "1.0",
"nacos.cluster": "NJ",
"nacos.healthy": "true",
"preserved.register.source": "SPRING_CLOUD"
},
"uri": "http://192.168.31.208:8088",
"scheme": null,
"instanceId": null
}
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 五、元数据
Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。
级别:【服务级别、集群级别、实例级别】 其中前两个级别的元数据没太大作用,暂时可以不关注
# 5.1 元数据的作用
提供描述信息
让微服务调用更加灵活
例如:微服务版本控制,在现实开发中我们每个服务可能有多个版本V1、V2。。。 比如,用户服务的v2 只能 调用订单服务的v2,这种场景就适合用元数据来解决。
# 5.2 配置元数据
- 通过控制台配置。
- 配置文件指定:
比如我们为user-center这个服务设置两个元数据 instance=abc 和 version=v1 如下:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 设置nacos实例级别的元数据
metadata:
instance: abc
version: v1
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9