前言

最近在学习Nacos看了很多文章,今天不谈理论只上干货文章内容主要是Nacos的下载安装及服务注册,在这个过程中我想要表达的不仅是过程还有更重要的方法。此外我的写作目的有二,一是作为自己学习的记录,二是针对1.3.0这个版本写一个demo帮助有兴趣的同学快速入门少走弯路。

本文是基于以下环境搭建:

环境

版本

JDK

1.8

SpringBoot

2.2.0.RELEASE

SpringCloud

Hoxton.RELEASE

Nacos

1.3.0

一、 Nacos下载安装

移步Nacos官网 https://nacos.io,然后按截图从github上下载稳定版

nacos 增加redis配置 nacos新建用户_后端

nacos 增加redis配置 nacos新建用户_spring_02

nacos 增加redis配置 nacos新建用户_spring_03

解压到磁盘后找到bin目录中的启动文件,windows 选择startup.cmd启动,linux选择startup.sh文件,单机启动执行

sh startup.sh -m standalone 命令启动。

nacos 增加redis配置 nacos新建用户_spring_04

nacos 增加redis配置 nacos新建用户_后端_05

Nacos默认端口是8848,启动浏览器访问http://localhost:8848/nacos地址,用户名密码默认都是nacos

nacos 增加redis配置 nacos新建用户_java_06

可以看到服务列表是空的

nacos 增加redis配置 nacos新建用户_spring_07

二、注册服务

移步spring官网https://spring.io,查看集成Nacos所需依赖

nacos 增加redis配置 nacos新建用户_nacos 增加redis配置_08

nacos 增加redis配置 nacos新建用户_spring_09

 找到对应版本点击进入查看集成说明

nacos 增加redis配置 nacos新建用户_nacos 增加redis配置_10

然后再里面找到集成配置样例,这里只截一张,其他集成内容继续向下找

nacos 增加redis配置 nacos新建用户_spring_11

 2.1. 搭建consumer工程

样例看完了下面开始搭建服务工程。

(1)创建Maven父工程,重点在pom.xml 中添加 com.alibaba.cloud 依赖

<!-- alibaba cloud 依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<?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>microapps.cn</groupId>
    <artifactId>jmeter</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>consumer</module>
        <module>provider</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath />
    </parent>

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

    <dependencyManagement>
        <dependencies>
            <!-- spring cloud 依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- alibaba cloud 依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</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>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

(2)创建子工程,重点在pom.xml 中添加 discovery 依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<?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">
    <parent>
        <artifactId>jmeter</artifactId>
        <groupId>microapps.cn</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>microapps.cn</groupId>
    <artifactId>server</artifactId>

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

</project>

(3)创建启动类,并加入 @EnableDiscoveryClient注解标明启用发现服务客户端

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

/**
 * @author liuhe
 */
@SpringBootApplication
@EnableDiscoveryClient
class ConsumerApplication {
  public static void main(String[] args) {
    SpringApplication.run(ConsumerApplication.class, args);
  }
}

 (4)创建yml配置文件,指向Nacos服务地址

spring:
  application:
    name: consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8080

 (5)启动程序注册服务,发现服务以及注册到Nacos服务列表中了

nacos 增加redis配置 nacos新建用户_java_12

三、向Nacos注册元数据

 在工程中添加配置类,在其中加入注册时间这个元数据内容

import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.discovery.NacosWatch;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.client.CommonsClientAutoConfiguration;
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.WebApplicationContext;

import java.text.SimpleDateFormat;
import java.util.Date;

@Configuration
public class NacosDiscoveryClientConfiguration {

    @Bean
    public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties
            , WebApplicationContext webApplicationContext) {
        //更改服务详情中的元数据,增加服务注册时间
        nacosDiscoveryProperties.getMetadata().put("startup.time"
                , new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                        .format(new Date()));
        return new NacosWatch(nacosDiscoveryProperties);
    }
}

再次访问Nacos 在服务详细中查看添加的注册时间

nacos 增加redis配置 nacos新建用户_spring_13

四、配置服务权重

同一个服务可以启动多个实例所为负载均衡,官方提供了服务权重功能,可以为每个服务配置不同的权重权重值越高得到的访问浏览越大,而当权重给到0时则表示停止接受访问请求,可以作为优雅下线的准备工作。实际测试设置为0确实接受不到访问请求,但两国服务分别设置非0整数时并没有发现值越大接受的访问请求越多的情况,此处还需进一步研究也欢迎大家尝试讨论。

nacos 增加redis配置 nacos新建用户_后端_14

 

nacos 增加redis配置 nacos新建用户_nacos 增加redis配置_15

到这里demo程序已经搭建完毕,后续还会分享Nacos动态配置管理文章。