文章目录
前言
为什么要学习和使用springcloud Alibaba ?
因为springcloud的很多组件是由Netflix公司所提供,而且组件大多都进入维护时期,所以随着时间的不停推进,我们就需要一种更为合适的组件来进行开发,而springcloud Alibaba 就应运而生。
一、nacos是什么?
官网路径: https://nacos.io/zh-cn/docs/what-is-nacos.html.
github路径:https://github.com/alibaba/spring-cloud-alibaba.
以下是官网的解释
简而言之:Nacos可以提供服务的注册与发现(替代Eureka,consul,zookeeper之类的),和统一配置管理(代替config)。相当于一个组件替代了两个组件,更为便捷。
二、作为注册中心
1.安装nacos
下载地址:https://github.com/alibaba/nacos/releases.
学习期间使用windows版本,建议使用linux版
本次使用是nacos-server-1.3.2.zip。
下载后解压
进入bin目录,进入命令提示框,输入startup.cmd,启动。默认端口8848(珠峰的高度)
访问:http://localhost:8848/nacos/#/login
登录名/密码: nacos/nacos
2.配置客户端微服务
我们此时配置两台服务提供,一台服务消费,用于测试。
1.引入库
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
官网截图:
2.修改配置文件
application.yml
server:
port: 9001
spring:
application:
name: nacos-provider-payment
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: "*"
github官网:
3.主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderNacosMain9001 {
public static void main(String[] args) {
SpringApplication.run(ProviderNacosMain9001.class,args);
}
}
4.服务提供的业务类
ProviderController
@RestController
@RequestMapping("/provider")
public class ProviderController {
@Value("${server.port}")
public String port;
@GetMapping("/getPort/{id}")
public String getPort(@PathVariable("id") String id){
return "调用Provider服务成功,端口:"+port+"id:"+id;
}
}
5.服务消费的业务类
使用restTemplate调用其他服务。
ApplicationContextConfig
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
ConsumerController
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
public RestTemplate restTemplate;
@GetMapping("/getPort/{id}")
public String getPort(@PathVariable("id") String id){
return restTemplate.getForObject("http://nacos-provider-payment/provider/getPort/"+id,String.class);
}
}
3.测试
配置一台服务83,消费配置两台客户端服务提供9001,9002,三台微服务全部注册在nacos。
第一次访问:http://localhost:83/consumer/getPort/13
第二次访问:http://localhost:83/consumer/getPort/13
通过以上测试发现,nacos支持负载均衡,这是为什么呢?
答案就是:nacos集成了ribbon。
Ribbon学习链接: https://blog.csdn.net/qq_33788786/article/details/111566622.
二、作为配置中心
nacos安装步骤省略
1. 引入pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.修改配置文件
nacos作为配置中心时,其他微服务的配置文件同样支持两种,bootstrap.yml和application.yml这两种配置文件的加载顺序时bootstrap优先于application的,两个文件合起来就是微服务的配置文件信息。
bootstrap.yml
server:
port: 9001
spring:
application:
name: nacos-provider-payment
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
management:
endpoints:
web:
exposure:
include: "*"
application.yml
spring:
profiles:
active: dev
4.主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderNacosMain9001 {
public static void main(String[] args) {
SpringApplication.run(ProviderNacosMain9001.class,args);
}
}
5.业务类
ProviderController.java
6.nacos配置文件
在nacos上发布配置文件nacos-provider-payment-dev.yaml
重点:
1.DATA ID的配置规则如下
根据上述的配置规则,配置nacos配置文件的DATA ID
2.group分组
DEFAULT_GROUP是nacos提供的一个默认分组,也可以手动创建其他分组,它的作用,在后面会提到。
6.测试
访问:http://localhost:9001/provider/getInfo
顺利拿到信息。
重点!!!
nacos也支持配置文件的动态加载,只需要在上面的业务类上配置@RefreshScope注解即可完成,当你在nacos客户端更新完成之后,微服务会自动刷新配置,在此处我就不在测试了。
7.nacos作为配置中心须知
nacos作为配置中心时还提供了命名空间(namespace),分组 (group)的隔离手段。
(1)namespace(命名空间)用于隔离不同租户的配置。在不同的命名空间中,组和数据ID可以相同。命名空间的典型场景是隔离不同环境的配置,例如,开发/测试环境与生产环境(配置和服务等)之间的隔离。
在nacos管理台创建命名控件。如下:test
namespace创建之后就会在配置文件菜单看到如下
(boostarp.yml)配置文件:
spring.cloud.nacos.config.namespace = eb36721e-8591-42f8-9bfc-169ed4615f22
这个值就是命名空间创建时的id
(2)group(分组)是一个可以自定义的隔离。
在nacos管理台创建命名控件。如下:TEST_GROUP
(boostarp.yml)配置文件:
spring.cloud.nacos.config.group = TEST_GROUP
ps:
nacos可以支持共享配置,多文件配置等等配置项,不在此处一一展示。
更多配置可以参考官网:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config-en.