Spring Cloud Alibaba快速入门02-Nacos

发布于:2025-09-07 ⋅ 阅读:(14) ⋅ 点赞:(0)


在这里插入图片描述

前言

Nacos(Naming Configuration Service)是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

它由阿里巴巴开源,并已成为 Spring Cloud Alibaba 生态系统的核心组件,同时完美集成到 Spring Cloud 体系中,可以替代 Netflix Eureka、Consul、ZooKeeper 等组件。

它的核心功能可以拆解为两个词:

  1. Naming (服务发现与注册)
  2. Configuration (配置管理)

Nacos安装

  • Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • 官网:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
  • 安装:
    • 下载安装包【2.4.3】
    • 启动命令: startup.cmd -m standalone

nacos历史版本地址:https://nacos.io/download/release-history/?spm=5238cd80.47ee59c.0.0.189fcd36EUPree

启动nacos单机模式

1.解压nacos-server-2.4.3.zip后进入bin
2.cmd进入黑窗口
3.使用 startup.cmd -m standalone 命令启动nacos单机模式
在这里插入图片描述

实现注册中心-服务注册

步骤流程如下
在这里插入图片描述

步骤1 - 启动微服务

进入services-order
pom.xml依赖

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

步骤2 - 引入服务发现依赖

因为要把order注册到注册中心,所以导入nacos依赖(这里在services父项目中已经导入)

步骤3 - 配置Nacos地址

现在需要将当前项目注册到注册中心,所以需要在application.yml中配置nacos地址(告诉当前应用nacos在哪里)
启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

application.yml

server:
  port: 8080
  servlet:
    context-path: /
spring:
  application:
    name: qf-service-order
  # 配置nacos地址(告诉当前应用nacos在哪里)
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848

项目结构
在这里插入图片描述

步骤4 - 查看注册中心效果

访问:http://127.0.0.1:8848/nacos/index.html
在这里插入图片描述

在这里插入图片描述

步骤5 - 集群模式启动测试

打开左下角Services
在这里插入图片描述
如果没有添加(为空),则需要先添加
在这里插入图片描述
选择其中spring boot选项
出现以下情况
在这里插入图片描述
点击右键,复制一个服务
在这里插入图片描述
点击后修改服务名称,修改服务端口
在这里插入图片描述

在这里插入图片描述
完整配置
–server.port=8081
在这里插入图片描述
点击ok
配置完成后同一时间启动
1.shift选择要启动的项目
2.点击右键,选择Rerun
在这里插入图片描述
启动成功后可以在nacos上看到启动的服务
在这里插入图片描述

实现注册中心-服务发现

在这里插入图片描述使用@EnableDiscoveryClient开启服务发现功能

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient//开启服务发现功能
@SpringBootApplication
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class, args);
    }
}

导入单元测试依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope><!--只在test目录下生效-->
</dependency>

执行

import com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery;
import com.alibaba.nacos.api.exception.NacosException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;

import java.util.List;

@SpringBootTest
public class DiscoveryTest {
    @Autowired
    DiscoveryClient discoveryClient;
    @Test
    void discoveryClientTest(){
        for (String service : discoveryClient.getServices()) {
            System.out.println("service = " + service);
            //获取ip+port
            List<ServiceInstance> instances = discoveryClient.getInstances(service);
            for (ServiceInstance instance : instances) {
                System.out.println("ip:"+instance.getHost()+";"+"port = " + instance.getPort());
            }
        }
        /*
        service = qf-service-order
        ip:192.168.109.1;port = 8080
        ip:192.168.109.1;port = 8081
        service = qf-service-product
        ip:192.168.109.1;port = 8181
        ip:192.168.109.1;port = 8180
        ip:192.168.109.1;port = 8182
         */
    }

    @Autowired
    NacosServiceDiscovery nacosServiceDiscovery;
    @Test
    void  nacosServiceDiscoveryTest() throws NacosException {
        for (String service : nacosServiceDiscovery.getServices()) {
            System.out.println("service = " + service);
            List<ServiceInstance> instances = nacosServiceDiscovery.getInstances(service);
            for (ServiceInstance instance : instances) {
                System.out.println("ip:"+instance.getHost()+";"+"port = " + instance.getPort());
            }
        }
        /*
        service = qf-service-order
        ip:192.168.109.1;port = 8080
        ip:192.168.109.1;port = 8081
        service = qf-service-product
        ip:192.168.109.1;port = 8181
        ip:192.168.109.1;port = 8180
        ip:192.168.109.1;port = 8182
         */
    }
}

DiscoveryClient是spring的规范,NacosServiceDiscovery是nacos的

模拟掉线

在这里插入图片描述
运行nacosServiceDiscoveryTest()

service = qf-service-order
ip:192.168.109.1;port = 8080
service = qf-service-product
ip:192.168.109.1;port = 8181
ip:192.168.109.1;port = 8180
ip:192.168.109.1;port = 8182


网站公告

今日签到

点亮在社区的每一天
去签到