Nacos入门与实践

将 Nacos 集成到 Spring Cloud 项目中,可以实现服务发现和配置管理。以下是一个详细的入门指南,包括如何设置 Nacos 服务器,创建 Spring Cloud 项目,进行服务发现和配置管理。

1. 环境准备

首先,确保你已经安装了以下工具:

  • JDK 1.8+
  • Apache Maven 3.3+
  • Docker(可选,用于运行 Nacos 服务器)

2. 下载和启动 Nacos 服务器

使用 Docker 启动 Nacos

最简单的方式是使用 Docker 启动 Nacos 服务器。

docker run -d --name nacos-server -e MODE=standalone -p 8848:8848 nacos/nacos-server:latest

Nacos 服务器将运行在 http://localhost:8848

手动下载和启动 Nacos

你也可以手动下载 Nacos:

  1. Nacos 官网 下载 Nacos 的最新版本。
  2. 解压下载的文件。
  3. 进入解压后的目录,运行以下命令启动 Nacos 服务器:
sh startup.sh -m standalone

3. 创建一个简单的 Spring Cloud 项目

我们将创建一个简单的 Spring Cloud 项目,包括服务提供者和服务消费者两个模块,并使用 Nacos 进行服务注册和配置管理。

项目结构
nacos-demo
├── nacos-provider
├── nacos-consumer
└── pom.xml
1. 创建父POM文件

首先,在项目根目录创建 pom.xml 文件,定义父POM:

pom.xml:

<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.example</groupId>
    <artifactId>nacos-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>nacos-provider</module>
        <module>nacos-consumer</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
2. 创建服务提供者 (Provider)

nacos-provider/pom.xml:

<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>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>nacos-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>nacos-provider</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
</project>

nacos-provider/src/main/resources/application.yml:

server:
  port: 8080

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

nacos-provider/src/main/java/com/example/provider/NacosProviderApplication.java:

package com.example.provider;

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

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

nacos-provider/src/main/java/com/example/provider/controller/HelloController.java:

package com.example.provider.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String sayHello(@RequestParam String name) {
        return "Hello, " + name;
    }
}
3. 创建服务消费者 (Consumer)

nacos-consumer/pom.xml:

<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>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>nacos-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>nacos-consumer</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <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>
    </dependencies>
</project>

nacos-consumer/src/main/resources/application.yml:

server:
  port: 8081

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

nacos-consumer/src/main/java/com/example/consumer/NacosConsumerApplication.java:

package com.example.consumer;

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

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

nacos-consumer/src/main/java/com/example/consumer/client/HelloClient.java:

package com.example.consumer.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "nacos-provider")
public interface HelloClient {
    @GetMapping("/hello")
    String sayHello(@RequestParam(name = "name") String name);
}

nacos-consumer/src/main/java/com/example/consumer/controller/HelloController.java:

package com.example.consumer.controller;

import com.example.consumer.client.HelloClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    private final HelloClient helloClient;

    public HelloController(HelloClient helloClient) {
        this.helloClient = helloClient;
    }

    @GetMapping("/hello")
    public String sayHello(@RequestParam String name) {
        return helloClient.sayHello(name);
    }
}

4. 构建和运行

首先,通过Maven构建项目。在项目根目录下运行以下命令:

mvn clean install
启动服务提供者

进入 nacos-provider 目录,运行以下命令启动服务提供者:

mvn spring-boot:run
启动服务消费者

进入 nacos-consumer 目录,运行以下命令启动服务消费者:

mvn spring-boot:run

如果一切正常,你应该可以在浏览器中访问 http://localhost:8081/hello?name=World,并看到以下输出:

Hello, World

5. 配置管理

Nacos 还提供了强大的配置管理功能。你可以在 Nacos 控制台中添加配置项,并在应用程序中使用这些配置。

在 Nacos 中添加配置
  1. 访问 Nacos 控制台 http://localhost:8848/nacos
  2. 登录(默认用户名和密码均为 `

nacos`)。
3. 在 “配置管理” -> “配置列表” 中,点击 “发布配置” 按钮。
4. 填写配置:

  • Data ID: nacos-provider.yml
  • Group: DEFAULT_GROUP
  • 配置内容:
    spring:
      application:
        name: nacos-provider
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
    
在服务提供者中使用配置

修改 nacos-provider/src/main/resources/application.yml 文件,以便从 Nacos 获取配置:

server:
  port: 8080

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml

总结

通过以上步骤,你已经成功创建了一个简单的 Spring Cloud 项目,并使用 Nacos 实现了服务注册、服务发现和配置管理。Nacos 提供了丰富的功能,可以帮助你构建高性能、可伸缩的分布式系统。通过深入学习和实践,可以更好地掌握 Nacos 的高级特性和最佳实践,满足实际项目的需求。

相关推荐

  1. Nacos入门实践

    2024-06-16 02:00:02       27 阅读
  2. MongoDB入门实践

    2024-06-16 02:00:02       28 阅读
  3. springcloud入门实践

    2024-06-16 02:00:02       23 阅读
  4. Redis入门实践

    2024-06-16 02:00:02       30 阅读
  5. nginx入门实践

    2024-06-16 02:00:02       33 阅读
  6. MySQL:入门实践

    2024-06-16 02:00:02       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 02:00:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 02:00:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 02:00:02       82 阅读
  4. Python语言-面向对象

    2024-06-16 02:00:02       91 阅读

热门阅读

  1. 08:打印字符

    2024-06-16 02:00:02       28 阅读
  2. kubernetes部署dashboard

    2024-06-16 02:00:02       28 阅读
  3. go 协程

    go 协程

    2024-06-16 02:00:02      32 阅读
  4. 增量数据库同步软件PanguSync侵入式全面清理脚本

    2024-06-16 02:00:02       32 阅读
  5. LeetCode 596, 13, 2

    2024-06-16 02:00:02       34 阅读
  6. 【无标题】

    2024-06-16 02:00:02       25 阅读
  7. React Native 快速Demo(1)

    2024-06-16 02:00:02       35 阅读
  8. 【React】在 react 应用中,怎么使用useReducer

    2024-06-16 02:00:02       30 阅读
  9. 前端面试题日常练-day67 【面试题】

    2024-06-16 02:00:02       29 阅读