Spring Cloud Alibaba 1 nacos搭建


Spring Cloud Alibaba 1 nacos搭建

安装启动nacos

  • 下载
  • 解压
    unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
    cd nacos/bin
  • 启动
    Linux/Unix/Mac
    启动命令(standalone代表着单机模式运行,非集群模式):
    sh startup.sh -m standalone
    
    如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
    bash startup.sh -m standalone
    
    Windows
    启动命令(standalone代表着单机模式运行,非集群模式):
    startup.cmd -m standalone
  • 控制台
    localhost:8848/nacos/index.html
  • 关闭
    Linux/Unix/Mac
    sh shutdown.sh
    
    Windows
    shutdown.cmd

编码

启动配置管理

创建项目

  1. 创建父maven项目,配置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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.zzz</groupId>
        <artifactId>zwq-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <properties>
            <java.version>1.8</java.version>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <!-- Spring Cloud -->
            <spring.cloud.version>Hoxton.SR12</spring.cloud.version>
        </properties>
    
        <modules>
            <module>nacos</module>
        </modules>
    
        <dependencyManagement>
            <dependencies>
    
                <!-- Spring Dependencies -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.3.3.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring.cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.2.1.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
            </dependencies>
        </dependencyManagement>
    
    </project>
  2. 创建子项目(springboot) nacos,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.zzz</groupId>
            <artifactId>zwq-cloud</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../pom.xml</relativePath>
        </parent>
        <groupId>com.zzz</groupId>
        <artifactId>nacos</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>nacos</name>
        <description>Demo project for nacos</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</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>
    
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bootstrap</artifactId>
                <version>3.0.3</version>
            </dependency>
    
        </dependencies>
    
        <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>

注:项目需要使用bootstrap.yml作为配置文件(application.properties不生效),需要添加依赖(上面的artifactId: spring-cloud-starter-bootstrap)

项目结构

nacos创建配置文件

  1. 进入控制台 http://localhost:8848/nacos/index.html
  2. 添加配置文件
    Data Id/Group/内容如下:
    pped-ok.yml PPED_GROUP :
    user: 
     username: 'zwq3'
     pass: 'zwqzwq3'
    
    pped-1.yml PPED_GROUP :
    msg: 
     content: '内容3'
     time: 'today3'
    
    pped.yml PPED_GROUP :
    dd:
     content: '默认3'

项目创建配置文件

application.properties:

server.port=18084
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

bootstrap.yml:

spring:
  application:
    # 服务名
    name: pped
  cloud:
    nacos:
      config:
        # 是否开启配置中心 默认true
        enabled: true
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 配置文件后缀
        file-extension: yml
        # 配置对应的分组
        group: PPED_GROUP
        # 命名空间 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
        # namespace: ba42e722-81aa-48f1-9944-9dca57d5f396
        # Nacos 认证用户
        username: nacos
        # Nacos 认证密码
        password: nacos
        # 支持多个共享 Data Id 的配置,优先级小于extension-configs,自定义 Data Id 配置 属性是个集合,内部由 Config POJO 组成。Config 有 3 个属性,分别是 dataId, group 以及 refresh
        shared-configs[0]:
          data-id: pped-ok.yml # 配置文件名-Data Id
          group: PPED_GROUP   # 默认为DEFAULT_GROUP
          refresh: true   # 是否动态刷新,默认为false
        shared-configs[1]:
          data-id: pped-1.yml # 配置文件名-Data Id
          group: PPED_GROUP   # 默认为DEFAULT_GROUP
          refresh: true   # 是否动态刷新,默认为false
        refresh-enabled: true

项目写代码测试是否能获取配置文件内容

TestController:

/**
 * description: 测试
 *
 * @author zwq
 * @date 2022/4/11 15:50
 */
@RestController
@RequiredArgsConstructor
// 刷新配置文件
@RefreshScope
public class TestController {

	private final UserDO userDO;

	private final NacosConfigManager nacosConfigManager;

	private final Environment environment;

	@Value("${msg.content}")
	String content;

	@Value("${msg.time}")
	String time;

	@Value("${dd.content}")
	String dd;

	@Value("${user.username}")
	String userName;

	@Value("${user.pass}")
	String pass;

	@GetMapping("test")
	public String test() {
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.append(userName + " ").append(pass + " ");
		stringBuilder.append(content + " ").append(time + " ");
		stringBuilder.append(dd + " ");
		System.out.println(userDO.getUsername() + userDO.getPass());
		System.out.println(nacosConfigManager.getConfigService());
		System.out.println(nacosConfigManager.getNacosConfigProperties());
		System.out.println(environment.getProperty("pped-ok.yml"));
		System.out.println(environment.getProperty("pped-test"));
		return stringBuilder.toString();
	}

}

启动服务发现

  1. 添加依赖
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
  2. 添加配置
    spring:
      application:
        # 服务名
        name: pped
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
            group: PPED_GROUP
  3. 启动类增加注解
    @EnableDiscoveryClient
  4. 控制台便能看到服务列表

  目录