Nacos 实现动态服务发现、服务配置、服务元数据以及流量管理
Nacos = Eureka+Config+Bus
作用
替代eureka作为注册中心
替代config作为服务配置中心
下载:https://github.com/alibaba/nacos/releases
安装运行 Nacos
解压安装包,直接运行bin目录下的startup.cmd
命令运行成功后直接访问http://localhost:8848/nacos,默认账号密码都是nacos
使用nacos作为注册中心
如果要使用Spring Cloud Alibaba 的组件都需要在pom.xml中添加如下的配置
<dependencyManagement> <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> </dependencyManagement> |
创建cloudalibaba-provider-payment9001模块
- 在pom文件中增加依赖
<dependencies> <!--SpringCloudailibaba nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> |
- 修改配置文件application.yml
server: port:9001 spring: application: name:nacos-payment-provider cloud: nacos: discovery: server-addr:127.0.0.1:8848 #配置nacos地址 management: endpoints: web: exposure: include:'*' |
- 启动cloudalibaba-provider-payment9001,在http://localhost:8848/nacos中查看信息
负载均衡功能
- 新建cloudalibaba-provider-payment9002模块(参考cloudalibaba-provider-payment9001)两个提供者
- 两个服务controller
@RestController public class PaymentController{ @Value("${server.port}") private String serverPort; @GetMapping(value="/payment/nacos/{id}") public String echo(@PathVariable("id")Integerid){
return"NacosDiscovery,serverport:"+serverPort+",id:"+id;
} } |
- 新建cloudalibaba-consumer-nacos-order6001 一个消费者
消费者默认会去调用提供者的接口,我们调用消费者的接口模拟负载均衡
server: #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者) |
消费者接口类
@RestController public class OrderNacosController{ @Resource private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; @GetMapping(value="/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id")Integerid){ returnrestTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class); } } |
- 访问http://localhost:6001/consumer/payment/nacos/1 查看nacos实现负载均衡,效果图如下:
使用nacos作为配置中心
- 创建cloudalibaba-config-nacos-client3377模块
- 在pom中添加依赖
<!--nacos-discovery--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> |
- 添加配置文件application.yml,启动的是dev环境配置
spring: profiles: active: dev #表示开发环境 #active: test #表示测试环境 |
- 添加配置文件bootstrap.yml,主要是对nacos作为配置中心的功能进行配置
# nacos配置 server: port: 3377
spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 |
- 创建ConfigClientController,从nacos配置中心获取配置
@RestController @RefreshScope public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo (){ return configInfo; } } |
在nacos中添加配置
- nacos中的Data id的组成格式以及springboot配置文件中的属性对应关系
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
- 比如说我们现在要获取应用名称为nacos-config-client的应用在dev环境下的yaml配置,dataid如下:
nacos-config-client-dev.yaml
- 按照以上dataid添加如下配置
config:
info: "config info for dev"
- 填写示意图如下:
- 启动 cloudalibaba-config-nacos-client3377,访问http://localhost:3377/config/info
nacos的动态刷新配置