目录
一、什么是Nacos
二、Nacos下载
三、Nacos生产者实例
1.新建项目
2.修改pom.xml
3.修改application.yml
4.修改主启动类
5.编辑业务类
6.测试
四、Nacos消费者实例
1.创建项目
2.编辑pom.xml
3.编辑application.yml
4.编辑主启动类
5.编辑业务类
6.测试
五、各种注册中心比较
六、Nacos作为服务配置中心的基本使用实例
1.创建项目
2.编辑pom.xml
3.编辑配置文件
4.编写主启动类
5.编写业务类
6.测试
七、Nacos作为服务配置中心的分类配置使用
1.服务配置中心存在什么问题
2.解决思路
3.配置DataId
4.配置groupid
5.配置namespace
八、打赏请求
SpringCloud Alibaba官网
https://github.com/alibaba/spring-cloud-alibaba/blob/master/Roadmap-zh.md
一、什么是Nacos
Nacos官网地址:
Nacos = 注册中心 + 配置中心的组合
Nacos = Eureka + Config + Bus
Nacos是个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台。
Nacos官网地址:
https://spring.io/projects/spring-cloud-alibaba
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
二、Nacos下载
下载网址:https://github.com/alibaba/nacos/releases/tag/1.1.4
如果下载慢,可以用迅雷来下载。
下载后解压:
cmd执行:
#低版本用这个
startup.cmd
#高版本用这个
startup.cmd -m standalone
浏览器输入:
http://localhost:8848/nacos
账号密码都是:nacos
三、Nacos生产者实例
如果你是一路从入门到初级跟过来的,很多步骤应该重复很多遍了,我在高级里就会简单的叙述一下了:
1.新建项目
2.修改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">
<parent>
<artifactId>cloud</artifactId>
<groupId>com.xupeng.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-provider-payment9001</artifactId>
<dependencies>
<!--alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.xupeng.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
</dependencies>
</project>
3.修改application.yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: '*'
4.修改主启动类
package com.xupeng.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* [一句话描述该类的功能]
*
* @author : [xupeng]
* @version : [v1.0]
* @createTime : [2021/4/26 15:37]
*/
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args);
}
}
5.编辑业务类
PaymentController
package com.xupeng.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
* [一句话描述该类的功能]
*
* @author : [xupeng]
* @version : [v1.0]
* @createTime : [2021/4/26 15:38]
*/
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPay(@PathVariable("id") Integer id){
return "nacos ,serverPort :" + serverPort+"\t id: "+ id;
}
}
6.测试
测试通过后,再一样的方法创建9002:
四、Nacos消费者实例
1.创建项目
2.编辑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">
<parent>
<artifactId>cloud</artifactId>
<groupId>com.xupeng.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-consumer-nacos-order83</artifactId>
<dependencies>
<!--alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.xupeng.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
</dependencies>
</project>
3.编辑application.yml
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置nacos地址
#消费者将要去访问的微服务名称
service-url:
nacos-user-service: http://nacos-payment-provider
4.编辑主启动类
OrderNacosMain83
package com.xupeng.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* [一句话描述该类的功能]
*
* @author : [xupeng]
* @version : [v1.0]
* @createTime : [2021/4/26 17:00]
*/
@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain83 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain83.class, args);
}
}
5.编辑业务类
ApplicationContextConfig
package com.xupeng.springcloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* [一句话描述该类的功能]
*
* @author : [xupeng]
* @version : [v1.0]
* @createTime : [2021/4/26 17:02]
*/
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
OrderNacosController
package com.xupeng.springcloud.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
/**
* [一句话描述该类的功能]
*
* @author : [xupeng]
* @version : [v1.0]
* @createTime : [2021/4/26 17:03]
*/
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serviceURL;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id) {
return restTemplate.getForObject(serviceURL + "/payment/nacos/" + id, String.class);
}
}
6.测试
我们会发现,他实现了负载均衡。因为nacos的jar里有ribbon
五、各种注册中心比较
服务注册与发现框架 | CAP模型 | 控制台管理 | 社区活跃度 |
Eureka | AP | 支持 | 低 |
Zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP/CP都可以 | 支持 | 高 |
六、Nacos作为服务配置中心的基本使用实例
Nacos和springcloud config一样,在项目初始化时,要保证先从配置中心进行配置拉取。拉取配置后,才能保证项目的正常启动。
SpringBoot中配置文件的加载顺序:bootstrap高于application
1.创建项目
2.编辑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">
<parent>
<artifactId>cloud</artifactId>
<groupId>com.xupeng.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-config-nacos-client3377</artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.xupeng.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>
</dependencies>
</project>
3.编辑配置文件
因为用作配置中心,因此有两个配置文件:bootstrap.yml和application.yml,这一点
bootstrap.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yml格式的配置
#查找配置文件的方法:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
#对应我们这个案例就是:nacos-config-client-dev.yaml
application.yml
spring:
profiles:
active: dev #表示开发环境
4.编写主启动类
NacosConfigClientMain3377
package com.xupeng.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* [一句话描述该类的功能]
*
* @author : [xupeng]
* @version : [v1.0]
* @createTime : [2021/4/28 17:55]
*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
5.编写业务类
package com.xupeng.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* [一句话描述该类的功能]
*
* @author : [xupeng]
* @version : [v1.0]
* @createTime : [2021/4/28 17:55]
*/
@RestController
@RefreshScope //支持nacos动态刷新功能
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo(){
return configInfo;
}
}
6.测试
先启动nacos,然后再配置列表做如下设置:
然后我们本地跑一下3377,你会发现你一旦修改了,然后立刻页面就会改动(nacos,牛!)
七、Nacos作为服务配置中心的分类配置使用
1.服务配置中心存在什么问题
在实际开发中,首先我们有多个环境,比如开发环境,测试环境,生产环境。
其次,一个大型分布式微服务项目会有多个微服务子项目,每个子项目又有上述多个环境。
因此,怎么对这些微服务进行管理就很重要。
2.解决思路
nacos通过图形化管理界面来管理各种配置文件:
Namespace + Group + DataId
对应于nacos的:
最外层的namespace用于区分部署环境,GroupId和DataId逻辑上区分两个目标对象。
默认情况下,namespace = public,groupID = DEFAULT_GROUP
3.配置DataId
指定spring.profile.active和配置文件的DataId来使不同环境下读取不同的配置:
nacos里面配置test:
修改application.yml:
测试,一旦修改也能立刻改变:
4.配置groupid
修改配置文件:
测试:
5.配置namespace
我们先创建2个命名空间:
在dev的namespace下面新建dataId:
修改配置文件:
注意,配置文件要和上面nacos里面配置的要对应上
测试:
八、打赏请求
如果本篇博客对您有所帮助,打赏一点呗,谢谢了呢~