注册中心之Nacos
Springcloud + nacos – 版本选择
在一切开始之前需要确认所有的版本,因为如果版本不匹配可能会导致很多稀奇古怪的问题。
1、前置
- 先从spring官网确认Spring Cloud Alibaba的版本
- 通过Spring Cloud Alibaba的版本确认Spring Boot的版本 和 Nacos的版本
官网确认版本
地址: https://spring.io/projects/spring-cloud-alibaba
确认 Spring Cloud Alibaba: 2.2.1.RELEASE
2、选择Spring Boot Version
官网确认版本
地址: https://start.spring.io/actuator/info
现在我们可以知道, Spring Boot 版本: >=2.2.0.RELEASE and <2.3.0.M1
我们在看下nacos推荐版本
官网确认版本
地址: https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
确认 Spring Boot: 2.2.5.RELEASE
3、选择 Nacos Version
确认 Nacos: 1.2.1
4、选择 Spring Cloud
确认 Spring Cloud: Hoxton.SR3
注册中心
注册中心在微服务项目中扮演着非常重要的角色,是微服务架构中的纽带,类似于”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
在分布式系统中,我们面临着以下几个问题
如何管理庞大的网状服务结构?
服务宕机后,如何及时下线?
流量高峰时,服务如何有效的水平扩展?
除了基本的服务注册与发现机制,从开发和运维角度,至少还要考虑如下五个方面:
- 测活:服务注册之后,如何对服务进行测活以保证服务的可用性?
- 负载均衡:当存在多个服务提供者时,如何均衡各个提供者的负载?
- 集成:在服务提供端或者调用端,如何集成注册中心?
- 运行时依赖:引入注册中心之后,对应用的运行时环境有何影响?
- 可用性:如何保证注册中心本身的可用性,特别是消除单点故障?
Nacos注册中心
快速上手
Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。中文文档非常齐全,文档地址戳
下载与启动
- 源码下载
$ git clone https://github.com/alibaba/nacos.git
$ cd nacos/
$ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
$ ls -al distribution/target/
// change the $version to your actual path
$ cd distribution/target/nacos-server-$version/nacos/bin
- 安装包下载
可以从 最新稳定版本 下载 nacos-server-$version.zip
包。
Windows 下载解压后(.zip),直接点击 bin/startup.cmd
就可以了。
如果不小心报了如下错:
java.io.IOException: java.lang.IllegalArgumentException: db.num is null
org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup
work.boot.web.server.WebServerException: Unable to start embedded Tomcat
那说明你的Nacos默认是集群模式,需要改为单机模式
-
找到
startup.cmd
文件,并编辑 -
把集群模式改为单机模式
set MODE="cluster"
改为:
set MODE="standalone"
- Linux/Unix/Mac
$ unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
$ cd nacos/bin
启动命令(standalone代表着单机模式运行,非集群模式):
$ sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
$ bash startup.sh -m standalone
- 打开控制台:
Nacos提供了一个可视化的操作平台,安装好之后,在浏览器中输入http://localhost:8848
就可以访问了,默认的用户名和密码都是nacos(我使用的是1.3.0版本)
构建服务
它和Eureka
不一样,并不需要创建新的web项目,而是和Zookeeper
和Consul
一样,只需要下载安装启动后,将我们的微服务注册进去就可以了。 创建两个微服务,一个客户端(调用者)和一个服务端(提供者)
这里我先创建一个名为xianshishehui-nacos-parent
的聚合模块父项目,后续所有模块均在该父项目中完成。
父项目 pom.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xianshishehui.nacos</groupId>
<artifactId>xianshishehui-nacos-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--声明相关依赖版本-->
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
<nacos.version>1.2.1</nacos.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<