1.什么是Nacos
Nacos是一个服务发现组件也是一个配置服务器,用于解决服务器之前相互发现的问题以及管理微服务的配置。
2.Nacos架构图
3.搭建Nacos
3.1 Nacos下载地址
3.2 Nacos启动
3.2 Nacos本地访问
4. Nacos 用法介绍前的准备内容
准备两个Spring Boot项目,分别命名为’blog-center’和’author-center’,版本要求是v2.6.x+。
5.将应用’blog-center’注册到Nacos
5.1 加依赖 pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
5.2 写配置 application.yml
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
# 服务名称尽量用-,不用_和特殊字符
name: blog-center
5.3 启动项目
IntelliJ IDEA 查看:
Nacos->服务管理->服务列表 查看:
6.将应用’author-center’注册到Nacos
6.1 加依赖
同上
6.2 写配置 application.yml
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
# 服务名称尽量用-,不用_和特殊字符
name: author-center
server:
port: 8081
6.3 启动项目
注意地址端口号是8081
7.重复启用应用’blog-center’
7.1 编辑器启动
Edit configurations->Modify options->Allow multiple instances->apply->ok
7.2 新增端口
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
# 服务名称尽量用-,不用_和特殊字符
name: blog-center
server:
port: 8888
提示:重复启动项目时前一个项目的不要关闭,不然只能发现一个微服务
8.blog-center 引入服务发现
8.1 编写方法
package com.ding.contentcenter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class BlogCenterController {
@Autowired
private DiscoveryClient discoveryClient;
/*
* 测试:服务发现,博客内容中心总能找到作者中心
* @return 作者中心所有实例的地址信息
* */
@GetMapping("demo")
public List<ServiceInstance>getInstances(){
// 查询指定服务的所有实例信息
return this.discoveryClient.getInstances("author-center");
}
}
8.2 请求
http://localhost:8081/demo
8.3 响应结果
[
{
"serviceId": "author-center",
"host": "192.168.31.156",
"port": 8888,
"secure": false,
"metadata": {
"nacos.instanceId": "192.168.31.156#8888#DEFAULT#DEFAULT_GROUP@@author-center",
"nacos.weight": "1.0",
"nacos.cluster": "DEFAULT",
"nacos.healthy": "true",
"preserved.register.source": "SPRING_CLOUD"
},
"uri": "http://192.168.31.156:8888",
"instanceId": null,
"scheme": null
},
{
"serviceId": "author-center",
"host": "192.168.31.156",
"port": 8080,
"secure": false,
"metadata": {
"nacos.instanceId": "192.168.31.156#8080#DEFAULT#DEFAULT_GROUP@@author-center",
"nacos.weight": "1.0",
"nacos.cluster": "DEFAULT",
"nacos.healthy": "true",
"preserved.register.source": "SPRING_CLOUD"
},
"uri": "http://192.168.31.156:8080",
"instanceId": null,
"scheme": null
}
]
结果:发现了2个‘author-center’微服务的端口实例。
9.从端口实例中发现微服务的地址和端口
9.1 BlogCenterController.java
package com.ding.contentcenter;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@RestController
public class BlogCenterController {
private final DiscoveryClient discoveryClient;
/*
* 测试:从端口实例中发现微服务的地址和端口
* @return String
* */
@GetMapping("demo1")
public String getUrl(){
List<ServiceInstance> instances = discoveryClient.getInstances("author-center");
String targetURL = instances.stream()
.map(instance -> instance.getUri().toString())
.findFirst()
.orElseThrow(()->new IllegalArgumentException("当前没有实例"));
return targetURL;
}
}
9.2 请求地址
http://localhost:8081/demo1
9.3 响应结果
http://192.168.31.156:8888
10.服务发现的领域模型
10.1领域模型图
10.2 模型说明
1.Namesapce(命名空间),实现隔离,默认public。
2. Group(分组),不同服务可以分到一个组,默认DEFUALT_GROUP。
3.Service(微服务)
4.Cluster(集群),是对指定一个微服务的虚拟划分,默认DEFAULT,可用于容灾,微服务A同时部署到苏州和上海的机房,苏州的博客中心和作者中心尽量相互调用,用于提高性能。
5.Instance(微服务实例)
10.3写配置
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 指定命名空间
namespace: ffb836dc-a7d1-4f4b-a804-56bc051ba4ax
# 指定集群名称
cluster-name: SUZHOU
11.Nacos元数据
11.1 作用
1.提供实例的描述信息
2.让微服务调用更灵活,例如微服务的版本控制
11.2 写配置
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
metadata:
instance: fortest
version: v1
参考 :《面向未来微服务:Spring Cloud Alibaba》
完毕,内容较多,如有不清楚的地方欢迎留言、多多交流!