一、何为Nacos
Nacos 是 Alibaba 开发的用于微服务管理的平台,核心功能:服务注册与发现和集中配置管理。
-
Nacos 作为服务注册发现组件,可以替换Spring Cloud 应用中传统的服务注册于发现组件,如:Eureka、Consul 等,支持服务的健康检查。
-
Nacos 作为服务配置中心,可以替换 Spring Cloud Config、Apollo(阿波罗的分布式配置中心) 等。
二、Nacos 的下载和安装
首先去 nacos 的 github 地址下载 release 安装包。下载地址
进入到 nacos/bin 目录下面,startup 命令用于启动 nacos ,shutdown 命令用于停掉 nacos 。
单模式启动一
-
windows 系统
执行 startup.cmd -m standalone 启动,单模式启动
-
linux/unix 系统
执行 startup.sh -m standalone 启动。
-
docker
编写docker-compose.yml文件 启动该文件 命令: docker-compose up
nacos: image: nacos/nacos-server:latest container_name: nacos-standalone-8848 environment: - PREFER_HOST_MODE=hostname - MODE=standalone #单机模式启动 volumes: - ./8848/logs/:/home/nacos/logs #前面是宿主机名 后面是容器目录名 - ./8848/init.d/custom.properties:/home/nacos/init.d/custom.properties ports: - "8848:8848"
单模式启动二
1、修改startup.cmd文件
2、启动
-
windows 系统
执行 startup.cmd启动,单模式启动
-
linux/unix 系统
执行 startup.sh 启动。
三、
注册中心
虽然 Eureka Server 会被我们用 Nacos 替换掉,但是我们仍会使用 Ribbon、OpenFeign 作为远程调用的基础组件。
微服务整合 nacos 服务发现:
-
spring-cloud-starter-alibaba-nacos-discovery 是 spring-cloud-alibaba-dependencies 子项目。所以它们的版本号都不需要我们手动维护,继承自父项目 dependencyManagement 中的定义。
-
因为我们之前使用了 eureka ,所以用 nacos 的spring-cloud-starter-alibaba-nacos-discovery 将spring-cloud-starter-netflix-eureka-client 在 pom 文件中替换掉。
-
spring-cloud-starter-alibaba-nacos-discovery 也默认包含了 spring-cloud-starter-netflix-ribbon ,不需要单独引入 ribbon 。我们之前学习的所有的 ribbion 和 openfeign 相关的负载均衡、远程服务调用的知识在 nacos 下依然适用。
父POM文件
-
spring cloud alibaba version:2.2.5.RELEASE
-
spring boot version :2.3.11.RELEASE
-
spring cloud version:Hoxton.SR8
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modules>
<module>order</module>
<module>gateway</module>
</modules>
<groupId>com.woniu</groupId>
<artifactId>alibaba</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>alibaba</name>
<description>Demo project for Spring Boot</description>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
<spring.boot.version>2.3.11.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR8</spring.cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--Spring Cloud alibaba的版本管理, 通过dependency完成继承-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud的版本管理-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringBoot的版本管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
模块POM
<dependency> <!-- 自动引入 Ribbon -->
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在 application.yml(或 bootstrap.yml)中加入必要的服务注册中心信息配置(替换掉 eureka 相关配置):
spring:
application:
name: spring-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: public
username: nacos
password: nacos
加上 @EnableDiscoveryClient 注解(去掉 @EnableEurekaClient 注解),开启 Spring Cloud 的服务注册与发现功能。spring cloud alibaba 遵守 spring cloud 规范,因此 @EnableDiscoveryClient 注解能激活、启用 nacos 的服务发现功能。
@SpringBootApplication
@EnableDiscoveryClient
public class SpringProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringProviderApplication.class, args);
}
}
访问 Nacos 服务,通过 服务管理
-> 服务列表
,看到我们注册的服务已经在列表中
zuul网关启动的时候,把springcloud-alibaba的版本升级到 2.2.5