SpringCloud Alibaba Nacos - 服务注册和配置中心详解

逃离我推掉我的手 2023-03-13 03:26 169阅读 0赞

概述

学习一门技术最好的平台 - 官网
官网地址:https://nacos.io/zh-cn/

Nacos(Naming Configuration Service) 是什么

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

简单化:Nacos 就是 注册中心 + 配置中心

  • 能够替代Eureka做服务中
  • 能够替代Config做服务配置中心

Nacos 下载安装运行

下载地址:https://github.com/alibaba/nacos/releases

下载完成后解压目录结构如下:
在这里插入图片描述

点开bin目录,直接双击startup.cmd(window)即可运行 nacos
出现如下页面表示运行成功:
在这里插入图片描述

访问地址:
http://localhost:8848/nacos
在这里插入图片描述

Nacos 作为服务注册中心

Nacos配置

引用pom依赖

  1. <!--SpringCloud ailibaba nacos -->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. </dependency>

修改yml配置

  1. spring:
  2. application:
  3. name: springcloud-alibaba-provider-payment
  4. cloud:
  5. nacos:
  6. discovery:
  7. server-addr: localhost:8848 #配置Nacos地址
  8. ## 监控端点
  9. management:
  10. endpoints:
  11. web:
  12. exposure:
  13. include: '*'

然后启动服务,查看nacos控制台:
在这里插入图片描述

服务的消费者调用服务的提供者
服务提供者代码

  1. @RestController
  2. public class PaymentController {
  3. @Autowired
  4. private PaymentService paymentService;
  5. @Value("${server.port}")
  6. public String port;
  7. @GetMapping("/payment/timeout/get/{id}")
  8. public CommonResult<Payment> getPaymenttimeoutById(@PathVariable("id") Long id) {
  9. Payment payment = paymentService.getPaymentById(id);
  10. return new CommonResult<Payment>(200, port, payment);
  11. }
  12. @GetMapping("/payment/get/{id}")
  13. public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
  14. Payment payment = paymentService.getPaymentById(id);
  15. return new CommonResult<Payment>(200, port, payment);
  16. }
  17. }

服务调用者代码:

  1. @RestController
  2. public class OrderController {
  3. private final String PAYMENT_URI = "http://springcloud-alibaba-provider-payment";
  4. @Autowired
  5. private RestTemplate restTemplate;
  6. @GetMapping("/order/payment/{id}")
  7. public CommonResult<Payment> paymentByOpenFeign (@PathVariable("id") Long id) {
  8. CommonResult forObject = restTemplate.getForObject(PAYMENT_URI + "/payment/get/" + id, CommonResult.class);
  9. return forObject;
  10. }
  11. @GetMapping("/order/getPaymenttimeoutById/{id}")
  12. public CommonResult<Payment> getPaymenttimeoutById (@PathVariable("id") Long id) {
  13. CommonResult commonResult = restTemplate.getForObject(PAYMENT_URI + "/payment/timeout/get/" + id, CommonResult.class);
  14. return commonResult;
  15. }
  16. }

调用结果:
通过Nacos注册中心,
在这里插入图片描述

通过Nacos注册中心,服务调用者调用服务提供者调用成功

Nacos负载均衡

Nacos负载均衡和Eureka一样,只要在加上:@LoadBalanced
即可实现自动负载均衡

  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate restTemplate() {
  4. return new RestTemplate();
  5. }

启动2台服务的提供者注册进Nacos, 即可负载均衡
在这里插入图片描述

Nacos 与其他注册中心对比

在这里插入图片描述
在这里插入图片描述

Nacos 支持AP和CP的切换
在这里插入图片描述

Nacos 作为服务配置中心

Nacos作为配置中心的配置

添加pom依赖

  1. <!--nacos-config-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  5. </dependency>

添加配置bootstrap.yml 文件
bootstrap.yml 比 application.yml的优先级更高
在这里插入图片描述

  1. spring:
  2. application:
  3. name: springcloud-alibaba-provider-payment
  4. cloud:
  5. nacos:
  6. discovery:
  7. server-addr: localhost:8848 #Nacos服务注册中心地址
  8. config:
  9. server-addr: localhost:8848 #Nacos作为配置中心地址
  10. file-extension: yaml #指定yaml格式的配置
  11. group: DEV_GROUP
  12. namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4

Nacos配置规则

官网说明:
在这里插入图片描述

各个匹配规则对应如下图:
如果客户端的yml配置如下图,那么客户端就会去Nacos配置中心寻找
Data ID为springcloud-alibaba-provider-payment-dev.yaml 配置文件,加载进来。
在这里插入图片描述
在这里插入图片描述
配置示例:
Nacos配置中心:
在这里插入图片描述
在这里插入图片描述

对应客户端的 bootstrap.yml文件
在这里插入图片描述
application.yml文件

  1. spring:
  2. profiles:
  3. active: dev

这样配置,该客户端就会去Nacos 配置中心寻找Data ID 为:springcloud-alibaba-provider-payment-dev.yaml 的配置文件

客户端Controller类

  1. @RestController
  2. @RefreshScope
  3. public class PaymentController {
  4. @Autowired
  5. private PaymentService paymentService;
  6. @Value("${config.info}")
  7. private String configinfo;
  8. @GetMapping("/config/info")
  9. public String getConfiginfo() {
  10. return configinfo;
  11. }

启动测试 ,看看是否能加载到Nacos配置中心的 config.info的信息:
在这里插入图片描述

看结果,已经成功成配置中心获取到了配置

Nacos动态刷新

Nacos默认支持动态刷新
只需要加上注解:@RefreshScope

  1. @RestController
  2. @RefreshScope
  3. public class PaymentController {

当我修改Nacos对应的配置后,不需要重复服务,服务既可获取到最新的配置

Nacos的命名空间,Group,Data ID

命名空间 > Group > Data ID
在这里插入图片描述
Bootstarp.yml配置:
就会去需要对应 命名空间 下的 Group 下的 Data ID 配置文件
在这里插入图片描述

Nacos集群 和 持久化

官方指导文档:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

注意:官网集群搭建的 vip 值的 虚拟ip 一般我们用Nginx 来实现

Nacos集群结构图如下:
在这里插入图片描述

从上图可以看出,搭建Nacos集群需要的条件:

  • Nignx 集群,确保高可用
  • Nacos 至少3台
  • Mysql 集群,确保高可用,版本需要 5.6.5+

集群为什么使用Mysql?
在这里插入图片描述
在这里插入图片描述

Nacos集群搭建

Nacos 默认自带的是嵌入式数据库derby

环境准备:

  • Linux 环境 3台
  • Nginx:Linux已安装好Nginx
  • Mysql : Linux已安装好Mysql,版本需要 5.6.5+
  • 找到Nacos解压 目录:nacos\conf\nacos-mysql.sql 脚本
    去Mysql数据库执行该脚本即可

    在这里插入图片描述

搭建步骤:

先要Nacos解压目录的nacos\conf\nacos-mysql.sql 脚本已经在Mysql数据库执行好

  1. 下载Nacos Linux版本,并上传到Linux系统
  2. 解压
  3. 配置集群配置文件
    在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置 3个或3个以上节点)

    1. # ip:port
    2. 192.169.72.129:8848
    3. 192.169.72.130:8848
    4. 192.169.72.131:8848
  4. 添加Mysql数据源
    修改nacos\conf\application.properties 配置
    添加如下:

    1. spring.datasource.platform=mysql
    2. db.num=1
    3. db.url.0=jdbc:mysql://1.1.1.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    4. db.user=user
    5. db.password=password

    在这里插入图片描述

  5. 配置Nginx
    在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,169人围观)

还没有评论,来说两句吧...

相关阅读