1. Spring Cloud Alibaba 简介

   Spring Cloud Alibaba是阿里巴巴为分布式应用提供的一站式解决方案,能够更方便快捷地搭建分布式平台,nacos拥有着替换eureka server ,spring cloud config等组件的目标和意图,旨在能够更简便快速地去管理服务、注册服务、管理配置。

2. Spring Cloud Alibaba +Nacos搭建微服务架构

集成nacos

1. 启动nacos server

nacos 官方学习文档: https://nacos.io/zh-cn/docs/quick-start.html
下载nacos: https://github.com/alibaba/nacos/releases
也可以使用如下命令安装并编译项目:

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  

项目构建完毕后,会在\nacos\distribution\target\ 目录下生成对应的包:
在这里插入图片描述

在这里插入图片描述

进入到/nacos/bin 目录下 D:\Program Files\nacos\distribution\target\nacos-server-1.4.2-SNAPSHOT\nacos\bin:
在这里插入图片描述
执行命令 startup.cmd -m standalone, 以单例模式启动nacos服务器:

cd D:\Program Files\nacos\distribution\target\nacos-server-1.4.2-SNAPSHOT\nacos\bin
d:
startup.cmd -m standalone

启动成功后,会出现如下logo:
在这里插入图片描述
访问: http://192.168.31.166:8848/nacos/index.html, 用户名和密码都是nacos,登录成功后,就可以看到如下的nacos首页:
在这里插入图片描述

2. 微服务客户端集成spring cloud alibaba +nacos server

  自己建的项目相当于一个微服务客户端,在本例中就是一个nacos客户端,要想将服务注册到nacos server中,我们需要做三件事

1) 在pom.xml文件中添加依赖

nacos客户端依赖:

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

添加web和actuator依赖:

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.exam.springcloud</groupId>
    <artifactId>spring-cloud-alibaba</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-alibaba</name>
    <description>project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--引入nacos client依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>


    </dependencies>


    <!--引入spring cloud alibaba 的下载地址-->
    <dependencyManagement>
        <dependencies>
            <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>
        </dependencies>

    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2) 在application.properties|application.yml| bootstrap.yml(选一即可)添加nacos客户端配置

在项目中添加properties配置, 各配置的作用和含义类似于eureka的配置, 如下作出解释:

#指定微服务服务名称
spring.application.name= user
#指定nacos服务地址
spring.cloud.nacos.server-addr=localhost:8848
#指定注册中心地址
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
#暴露所有web端点
spring.cloud.nacos.discovery.user-name=nacos
spring.cloud.nacos.discovery.password=nacos
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
3) 开启服务发现注册

在应用的启动类上添加注解 @EnableDiscoveryClient

通过以上步骤添加好配置后,接下来启动服务,如果注册成功了,会在控制板上看到新建的user服务已经注册到nacos上去。
在这里插入图片描述
再次查看nacos服务列表,可以看到user服务已经注册到nacos 注册中心上去。
在这里插入图片描述

如果还有其他服务,那么采用相同的方式进行注册即可。

另外启动成功后我们还可以访问nacos服务发现自带的一个端点
/actuator/nacos-discovery
在这里插入图片描述
访问地址: http://127.0.0.1:8001/actuator/nacos-discovery
在这里插入图片描述

3. 微服务的使用

   由于Spring Cloud Alibaba是基于Spring boot进行集成的,服务间的调用仍然可以使用RestTemplate+ribbon进行调用,或者使用Feigin组件来实现服务间的调用, 以下文章能够帮助理解服务发现、服务注册以及服务调用。

文章列表:
Eureka服务发现注册详解
使用Ribbon+RestTemplate来实现微服务间的调用
从零开始搭建Feign客户端

4. 使用nacos管理配置

1) 新建一个命名空间

   命名空间的作用相当于是环境的分离,其作用类似于spring cloud config, 不同的命名空间配置是隔离的。
在这里插入图片描述

然后在该命名空间下添加配置 ,注意, 配置里最好不要有中文:
在这里插入图片描述

在这里插入图片描述

2)在项目中引入命名空间下的配置

  修改项目的配置如下, namespace和group分别为nacos面板里显示的:
在这里插入图片描述

# 读取配置的分组
spring.cloud.nacos.config.group=DEFAULT_GROUP
# 指定读取文件后缀
spring.cloud.nacos.config.file-extension=properties
# 指定读取文件的前缀
spring.cloud.nacos.config.namespace=c3a19cd1-6d71-428a-82ba-810e6279d3bf
# 指定应用名称
spring.application.name=user
# 指定读取文件的具体环境
spring.profiles.active=dev

  在pom.xml文件中添加nacos config依赖:

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

再次启动项目,查看服务是否重新注册到nacos!
在这里插入图片描述
由下可以发现服务再次注册到nacoe, 远程配置生效!
在这里插入图片描述

5. Nacos相比eureka注册中心的优势

  • nacos在剔除失效服务时,通过消息机制来通知服务实例,响应很快, Eureka只能通过任务定时剔除无效的服务,存在延时
  • nacos可以根据namespace命名空间,来区分不同环境(dev,test,prod)。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐