前言
最近在学习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上下载稳定版
解压到磁盘后找到bin目录中的启动文件,windows 选择startup.cmd启动,linux选择startup.sh文件,单机启动执行
sh startup.sh -m standalone 命令启动。
Nacos默认端口是8848,启动浏览器访问http://localhost:8848/nacos地址,用户名密码默认都是nacos
可以看到服务列表是空的
二、注册服务
移步spring官网https://spring.io,查看集成Nacos所需依赖
找到对应版本点击进入查看集成说明
然后再里面找到集成配置样例,这里只截一张,其他集成内容继续向下找
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注册元数据
在工程中添加配置类,在其中加入注册时间这个元数据内容
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 在服务详细中查看添加的注册时间
四、配置服务权重
同一个服务可以启动多个实例所为负载均衡,官方提供了服务权重功能,可以为每个服务配置不同的权重权重值越高得到的访问浏览越大,而当权重给到0时则表示停止接受访问请求,可以作为优雅下线的准备工作。实际测试设置为0确实接受不到访问请求,但两国服务分别设置非0整数时并没有发现值越大接受的访问请求越多的情况,此处还需进一步研究也欢迎大家尝试讨论。
到这里demo程序已经搭建完毕,后续还会分享Nacos动态配置管理文章。