一. Nacos与Eureka
1.1 什么是注册中心?
- 注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。
- 简单来说,注册中心就类似一个通讯录;当我们需要给某某某打电话(消费某个服务,调用某个服务的接口)的时候,通过注册中心,我们知道这个人的号码(知道服务是否正常,服务调用路径等信息),就可以直接打电话了;
- 也就是说,注册中心将各个服务登记在上面,并持续检查其服务是否正常,当外界访问接口时,可直接通过注册中心获取服务相关的信息;
1.2 什么是Eureka?
- Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
- eureka包含两个组件:Eureka Server和Eureka Client。
- Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
- Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
1.3 什么是服务发现?什么是服务注册?
- 什么是服务发现?
- 服务发现是指使用一个注册中心来记录分布式系统中的全部服务的信息,以便其他服务能够快速的找到这些已注册的服务。
- 什么是服务注册?
- 服务发现是针对消费者而言的,而服务注册则是针对生产者(服务提供方)而言的。服务配置自身的信息,将自己的信息发送至注册中心,保持自己的状态,这就是服务注册;
1.4 什么是Nacos?
- 英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心。服务在nacos是一等公民
- Nacos 是阿里巴巴的新开源项目,其核心定位是 “一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”。它同时是SpringCloud Alibaba全家桶中的一个基石;
- 使用Nacos我们可以完成注册中心,配置中心,管理中心,服务发现注册降级熔断等功能。它相比于Eureka功能更加齐全,代码耦合更低,性能更优异,且更易于分布式,高可用
二. 快速搭建Nacos平台(Linux版本)
2.1 下载nacos文件
- 方案一:
wget https://github.com/alibaba/nacos/releases/download/1.2.0/nacos-server-1.2.0.tar.gz
- 到官网下载,地址为:官网
官网下载后,上传至root目录下,可选择最新或最稳定版本
2.2 安装
- 下载: 参照2.1
- 解压:
tar -zxvf xxxxx.tar.gz
xxxx.tar.gz替换为自己实际版本的文件
- 设置登录验证(可跳过)
- application.properties中nacos.core.auth.enabled修改为true
- 如图所示:
- 进入nacos的bin目录
- 命令如示:
cd nacos/bin/
- 如图所示:
- 命令如示:
- 执行运行命令:
sh startup.sh -m standalone
执行startup.sh 启动 standalone表示是以单例启动,非集群模式;
- 检查是否成功启动:
- 命令所示:
netstat -lnp | grep 8848
- 如图所示:
> 如果没有显示出任何内容,说明未启动成功,可检查哪些细节漏了;
- 命令所示:
- 其他要说明的事项:
- 如果启动成功后依旧无法访问,请检查以下事项:
- 防火墙是否开启,若防火墙开启状态,则查看防火墙是否开放了8848端口,若未开放则开放端口;常用Linux防火墙相关命令请跳转: Linux常用命令
- 本机是否能连接到服务器,若不能ping通说明无法连接至服务器,请检查网络;
- 若需要关闭,可使用关闭命令:
sh shutdown.sh
- 如果启动成功后依旧无法访问,请检查以下事项:
2.3 访问
- 访问地址: http://127.0.0.1:8848/nacos
远程访问则将ip替换为服务器的实际ip即可
- 出现登录界面则说明启动成功:
- 如图所示:
- 登录及密码默认都是:
nacos
- 如图所示:
2.4 配置数据库(选配)
- nacos数据库默认有一个自己的嵌入式数据库,我们可以将其数据库替换为mysql数据库,这样我们可以直接在数据库中方便的配置一些配置了;
- 操作如下:
- 进入nacos/conf目录
cd ~/nacos/conf
- 编辑 application.properties
- 将以下内容取消注释,并在user,password配置自己的mysql账号密码,在db.url.0后面配置自己的mysql地址:
- 在自己的mysql上,新建一个nacos_config数据库,并执行如图的sql文件,创建nacos支持的表,如图所示:
- 然后可以参考 章节 2.3 进行启动;
- 将以下内容取消注释,并在user,password配置自己的mysql账号密码,在db.url.0后面配置自己的mysql地址:
- 进入nacos/conf目录
三. 微服务代码配置
3.1 引入依赖:
- Gradle项目:
compile group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery', version: '2.1.0.RELEASE'
- Maven项目:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
gradle也可以引入config,版本号需要的话可以实际去选择合适的版本
3.2 启动类
- 启动类上加上
@EnableDiscoveryClient
注解 - 如图所示:
3.3 配置类
- 代码如下:
spring: cloud: nacos: discovery: server-addr: nacos的ip地址:8848
- 如图所示:
四. 将Eureka项目迁移至Nacos
4.1 移除依赖
- 将gradle或Maven的依赖配置,包含eureka的依赖删除
4.2 移除配置
- 将application.yml或者其他配置文件中,将eureka的注册相关配置删除
4.3 移除注解
- 将启动类中包含
@EnableEurekaClient
的注解删除
4.4 移除Eureka服务
- 将Eureka服务删除
4.5 引入Nacos相关配置
- 参照章节三,引入即可
4.6 检查迁移是否成功
- 启动服务,登录nacos管理系统,查询服务是否注册上,若能注册上,则说明迁移成功