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

概述

学习一门技术最好的平台 - 官网
官网地址: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依赖

   <!--SpringCloud ailibaba nacos -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

修改yml配置

spring:
  application:
    name: springcloud-alibaba-provider-payment
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
        
## 监控端点
management:
  endpoints:
    web:
      exposure:
        include: '*'

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

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

@RestController
public class PaymentController {
    @Autowired
    private PaymentService paymentService;

    @Value("${server.port}")
    public String port;


    @GetMapping("/payment/timeout/get/{id}")
    public CommonResult<Payment> getPaymenttimeoutById(@PathVariable("id") Long id) {
        Payment payment = paymentService.getPaymentById(id);
        return new CommonResult<Payment>(200, port, payment);
    }


    @GetMapping("/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
        Payment payment = paymentService.getPaymentById(id);
        return new CommonResult<Payment>(200, port, payment);
    }
}

服务调用者代码:

@RestController
public class OrderController {

    private final String PAYMENT_URI = "http://springcloud-alibaba-provider-payment";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/order/payment/{id}")
    public CommonResult<Payment> paymentByOpenFeign (@PathVariable("id") Long id) {
        CommonResult forObject = restTemplate.getForObject(PAYMENT_URI + "/payment/get/" + id, CommonResult.class);
        return forObject;
    }

    @GetMapping("/order/getPaymenttimeoutById/{id}")
    public CommonResult<Payment> getPaymenttimeoutById (@PathVariable("id") Long id) {
        CommonResult commonResult = restTemplate.getForObject(PAYMENT_URI + "/payment/timeout/get/" + id, CommonResult.class);
        return commonResult;
    }
}

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

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

Nacos负载均衡

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

	@Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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

Nacos 与其他注册中心对比

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

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

Nacos 作为服务配置中心

Nacos作为配置中心的配置

添加pom依赖

<!--nacos-config-->
 <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>

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

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

Nacos配置规则

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

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

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

spring:
  profiles:
    active: dev

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

客户端Controller类

@RestController
@RefreshScope
public class PaymentController {
    @Autowired
    private PaymentService paymentService;


    @Value("${config.info}")
    private String configinfo;

    @GetMapping("/config/info")
    public String getConfiginfo() {
        return configinfo;
    }

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

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

Nacos动态刷新

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

@RestController
@RefreshScope
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个以上节点)

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

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

    在这里插入图片描述

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值