Nacos的官网对这一问题进行了详细的介绍,通俗的来讲:html
Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题:java
1.服务A如何发现服务Bgit
2.管理微服务的配置github
Nacos依靠java环境运行,搭建Nacos Server,须要配置maven环境,版本环境要求以下:web
一、64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac
二、64 bit JDK 1.8+
三、Maven 3.2.x+spring
Nacos提供了两种方式获取Nacos的服务端:ubuntu
一、源码下载编译浏览器
二、下载 Release 包bash
在你须要安装的地址下,执行:git clone https://github.com/alibaba/nacos.git服务器
将源码下载到本地以后,进入源码目录:cd nacos
执行命令:mvn -Prelease-nacos clean install -U
进入启动命令:cd distribution/target/nacos-server-1.1.3/nacos/bin/
从这个网址下载nacos-server-$version.zip 包,执行解压缩命令:unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
进入命令执行页面: cd nacos/bin
Lunix系统:
启动命令(standalone表明着单机模式运行,非集群模式):
sh startup.sh -m standalone
若是您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试以下运行:
bash startup.sh -m standalone
Windows系统:
启动命令:
cmd startup.cmd
或者双击startup.cmd运行文件
启动成功后
打开浏览器输入:http://127.0.0.1:8848/nacos,进入nacos可视化控制页面,帐号密码默认nacos。
首先,在加依赖,在dependencies中添加
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
而后,修改配置(server-addr不要加http或者https前缀,直接主机名/IP/域名 + 端口号就能够了)
spring: cloud: nacos: discovery: # 指定nacos server地址 server-addr: localhost:8848 application: name: study01
启动服务,打开Nacos Server控制台,能够看见刚刚启动的服务已经注册成功。
PS:对于Nacos Server版本与Nacos Client版本对应问题:
应用集成Nacos Client从而和Nacos Server通讯,咱们经过查看spring-cloud-alibaba-dependencies文件中使用了哪一个Nacos Client版本,下载相同版本的Nacos Server版本便可。
能够看见我当前版本的Spring Cloud Alibaba使用的Nacos Client版本为1.1.1,因为Nacos没有提供Nacos server1.1.1版本包,因此我直接使用了Nacos server1.1.3。
如何在服务A中调用服务B的请求,分为两步进行:
1.获取服务B的URL,由于考虑到服务B可能部署在多个服务器,或者更换升级服务器,因此不可以直接写死URL,咱们利用DiscoveryClient接口动态的获取服务B的URL
import org.springframework.cloud.client.discovery.DiscoveryClient; private final DiscoveryClient discoveryClient; // 服务B全部示例的信息 List<ServiceInstance> instances = discoveryClient.getInstances("服务B"); String targetURL = instances.stream() .map(instance -> instance.getUri().toString() + "/***/***") .findFirst() .orElseThrow(() -> new IllegalArgumentException("当前示例不存在"));
2.调用服务B的请求,咱们使用RestTemplate接口完成这一操做
import org.springframework.web.client.RestTemplate; private final RestTemplate restTemplate; Demo forObject = restTemplate.getForObject(targetURL, Demo.class, "请求参数");
关于领域模型,能够经过上图来理解:
最大的是Namespace(命名空间),Nacos默认的命名空间是public,Namespace主要用来实现隔离。比方说咱们如今有三个环境:开发、测试、生产环境,咱们就能够建立三个Namespace,不一样的Namespace之间是隔离的。
Namespace之下是Group(分组),Nacos默认Group是DEFAULT_GROUP,Group能够把不一样的微服务划分到同一个分组里面去,Group能够方便咱们的管理。
Group之下是Service,就是咱们所谓的微服务;一个Service能够包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分,比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就能够给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还能够尽可能让同一个机房的微服务互相调用,以提高性能。最后是Instance,就是微服务的示例。
首先在控制台新建一个命名空间
建立成功以后获得了一个UUID,将此UUID配置在配置文件中(必定要配置UUID,而不是命名空间名称),同时配置集群名称:
spring: cloud: nacos: discovery: # 指定nacos server地址 server-addr: localhost:8848 namespace: ab9783a7-dade-4da3-9abf-5cb2f5c52d59 cluster-name: HZ
能够在控制台查看到,多出了一个dev命名空间
服务中也多出了一个HZ集群
Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各类自定义标签 (label),从做用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。
一、提供描述信息
二、让微服务的调用更加灵活
微服务版本控制
一、控制台设置(key-value形式)
二、配置文件配置
spring: cloud: nacos: discovery: # 元数据 metadata: target-version: v1