Nacos 致力于帮助您发现、配置和管理微服务。
Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
nacos的主要应用:
1 Nacos官方给出运行环境的要求,需要先满足环境要求才能成功启动Nacos,为了避免jar冲突,我们可以看一下nacos及其他组件的版本关系
Nacos依赖Java环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
64 bit JDK 1.8+;下载 & 配置。
Maven 3.2.x+;下载 & 配置。
2 选择下载最新的免安装包,下载地址:https://github.com/alibaba/nacos/tags
这里我们选择nacos的单机启动方式,在cmd下进入nacos的bin目录执行以下命令
./startup.cmd -m standalone
# 如果是linux环境
./startup.sh -m standalone
3 nacos的默认端口时8848,启动nacos后,输入地址localhost:8848/nacos/,即可进入nacos后台,账号密码都是nacos,可以看到nacos的安装部署极其简单。
1 新建一个空的maven工程,然后添加module为springboot工程
2.我们以其中的articlecenter为例子,添加maven配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.11</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
3 application.properties添加配置
server.port=8091
spring.application.name=articlecenter
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
4 启动类上添加@EnableDiscoveryClient注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient // nacos服务发现
public class ArticlecenterApplication {
public static void main(String[] args) {
SpringApplication.run(ArticlecenterApplication.class, args);
}
}
编写一个测试用例:
@Slf4j
@RequestMapping("article")
@RestController
public class ArticleController {
@GetMapping("/look")
public String test(){
log.info("look article");
return "look article";
}
}
5 启动ArticlecenterApplication,刷新nacos后台就能看到这个articlecenter服务到nacos上了
注册上nacos的服务会定时的发送心跳信息给nacos,告诉nacos我这个服务还活着,同事naocos也会定时刷新可用列表,删掉太久没发心跳的服务
Feign是一种声明式,模板化的HTTP客户端,它能够调用本地方法一样调用远程方法,无感知远程http请求
1 为了说明服务调用,我们按照之前的方式,新建一个usercenter服务,同样的注册到nacos中。
2 添加依赖
<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
3 主程序入口添加了@EnableFeignClients注解开启对FeignClient扫描加载处理
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 //nacos
@EnableFeignClients //feign
public class UsercenterApplication {
public static void main(String[] args) {
SpringApplication.run(UsercenterApplication.class, args);
}
}
4 回到articlecenter中编写远程调用的请求
@Slf4j
@RequestMapping("article")
@RestController
public class ArticleController {
@GetMapping("/look/{id}")
public String look(@PathVariable(name = "id") String id){
return id+" look article!";
}
}
5 编写远程调用接口,name来指定FeignClient的名称,url可以指定@FeignClient调用的地址,一般用于测试
@Component
@FeignClient( name = "articlecenter", url = "http://127.0.0.1:8091")
public interface FeignTest {
@GetMapping("/article/look/{id}")
public String look(@PathVariable("id") String id);
}
编写一个测试接口,注入FeifnTest即可使用
@Slf4j
@RequestMapping("user")
@RestController
public class UserController {
@Autowired
private FeignTest feignTest;
@RequestMapping("/lookArticle")
public String lookArticle(){
String id = "ZhangSan";
String str = feignTest.look(id);
System.out.println("usercenter call "+str);
return "usercenter call "+str;
}
}
在地址栏中输入http://localhost:8090/user/lookArticle,就会输出usercenter call ZhangSan look article!,完成从usercenter调用articlecenter的接口。
配置中心主要用于管理微服务项目的配置文件。当我们修改一个配置参数时,需要重新打包发布,过程缓慢,而nacos可以让我们修改的参数立即生效。
在项目开发中,项目的配置文件里一般会加上profile,比如dev是开发环境、test是测试环境、pro是生产环境的配置。每种配置的参数不同,如数据源的切换。
1 添加依赖
<!-- 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
2 假设当前需要将usercenter的运行环境切换至开发环境
server.port=8090
spring.profiles.active=dev
spring.application.name=usercenter
spring.cloud.nacos.config.server-addr=192.168.174.31:8848
3 nacos创建配置usercenter-dev.properties
4 测试获取nacos配置文件中的信息
@Slf4j
@RefreshScope // 自动感知配置文件变化
@RequestMapping("test")
@RestController
public class TestController {
// 从配置文件获取属性值
@Value("${dev.url}")
private String url;
@RequestMapping("/url")
public String message() {
log.info(url);
return url;
}
}
1 默认情况下,nacos是使用了一个嵌入式数据库。可自定义数据库,但目前支持mysql。conf目录下,修改application.properties文件,将以下信息修改为个人数据库配置。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456
2 新建一个数据库名为nacos,将conf/nacos-mysql.sql 表结构导入到自己的数据库中,会看到以下nacos配置表
3 重启nacos,之后添加配置文件,在config_info表里看到配置文件内容。
参看文章:Nacos官方文档