[SpringCloud-12] SpringCloud Alibaba:Nacos

1、前言

  前面章节较多使用了 Netflix 的项目,现在它大部分项目都进入了维护模式,也就是说不会再进行更新和开发新的组件了。有一些组件都开始使用代替版了,比如 Ribbon 由 Loadbalance 代替等等。

  SpringCloud Alibaba 支持以下功能:
  1、服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RabbitMQ 限流降级功能的介入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控;
  2、服务注册与发现:适配 SpringCloud 服务注册与发现标准,默认集成了 Ribbon 的支持;
  3、分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新;
  4、阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据;
  5、分布式任务调度:提供秒级、精确、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网络任务。网络任务支持海量子任务均匀分配到所有 Worker(shedulerx-client)上执行。

  具体组件有:
  Nacos:阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  Sentinel:阿里巴巴开源产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  RocketMQ:Apache RocketMQ 基于 Java 的高性能、高吞吐量的分布式消息和流计算平台。
  Dubbo:Apache Dubbo 是一款高性能 Java RPC 框架。
  Seate:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。

2、Nacos:下载与安装

  官方网站:https://nacos.io/zh-cn/

  Nacos = Eureka + Config + Bus。

  Nacos 的下载地址:https://github.com/alibaba/nacos/tags,下面使用1.1.4 版本做讲解。

  windows 版本下载后解压进入 bin 目录双击 startup.cmd 即可开启 nacos,输入网址 http://localhost:8848/nacos ,默认账号密码都是 nacos ,即可访问控制台:
在这里插入图片描述

3、Nacos:服务注册

  对于要注册到 Nacos 的微服务,先导入核心依赖:

<!--spring cloud Alibaba 核心依赖-->
<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>

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

  修改配置文件 application.yaml

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

management:
  endpoints:
    web:
      exposure:
        include: '*'

  主启动类加注解激活:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication9001 {
    public static void main(String[] args) {
        SpringApplication.run(NacosProviderDemoApplication9001.class, args);
    }
}

  再复制两个 9002 、9003,配置一模一样,三个都启动后,可以看到注册成功:
在这里插入图片描述

4、Nacos:负载均衡

  再创建一个 83 端口模块,依赖和上面的 9001 一样,修改一下配置文件:

server:
  port: 83

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

# 要去访问的微服务名称
service-url:
  nacos-user-service: http://nacos-payment-provider

  配置一个 RestTemplate 的 Bean:

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

  写个控制器类做测试:

@RestController
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping("consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id) {
        return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);
    }
}

  控制器是调用 RestTemplate 去访问微服务,启动后,也注册到了 nacos:
在这里插入图片描述
  访问网址:http://localhost:83/consumer/payment/nacos/13 ,多刷几次,可以看到实现了负载均衡:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  我们通过依赖就可以看出其实是用了 Ribbon 的负载均衡。
在这里插入图片描述

5、Nacos:配置中心

  我们从 Nacos 的网页控制面板看到它还有配置中心的功能:
在这里插入图片描述
  一个需要从配置中心获取配置的模块,先导入核心依赖:

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

  类似 SpringCloud Config,编写 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  # 配置文件的格式

  编写 application.yaml

spring:
  profiles:
    active: dev # 开发环境

  主启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

  写一个控制器:

@RestController
@RefreshScope   // 支持 nacos 的动态刷新功能
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

  在配置列表新增一个配置文件:
在这里插入图片描述

  新增后,可以看到:
在这里插入图片描述
  启动这个 3355 模块,可以看到已经注册到 nacos 了:
在这里插入图片描述
  输入访问网址:http://localhost:3377/config/info,可以看到:
在这里插入图片描述
  成功从配置中心获取到了配置。此时我更新 Nacos 上的配置为如下:
在这里插入图片描述
  发布后再次访问 http://localhost:3377/config/info,可以看到:
在这里插入图片描述
  可以看到,实时更新了。不像 SpringCloud Config,还得增加多余的操作去刷新。

  Nacos 的配置功能有两个概念:命名空间和分组。其实可以看成两级文件夹,就是为了区分不同地区集群、不同环境(开发环境、测试环境或生产环境)的配置。

  命名空间可以在下面这里点击增加:
在这里插入图片描述
  比如我新增了一个 GZ 命名空间,表示广州的微服务集群都从这个命名空间获取配置:
在这里插入图片描述
  他会随机生成一个 ID,需要从这个命名空间获取配置的微服务的 bootstrap.yml 中都要标明:
在这里插入图片描述
  有了命名空间来区分不同地区机房,还提供一个叫做分组的概念来区分不同的开发环境:
在这里插入图片描述
  选择我们的 GZ 命名空间,然后新增一个配置文件:
在这里插入图片描述
  这个 Group 是可以自己编辑的,然后在 bootstrap.yml 指明哪个分组:
在这里插入图片描述
  重启这个 3377 ,输入网址 http://localhost:3377/config/info 可以看到:
在这里插入图片描述
   这里还要注意一个点,就是 Nacos 中的 Data Id
在这里插入图片描述
  它的命名方式为:

${prefix}-${spring.profile.active}.${file-extension}

  prefix:当前服务的名称;
  spring.profile.active:在 application.yaml 中指定;
  file-extension:配置文件的后缀

  用一张图说明:
在这里插入图片描述

6、Nacos:持久化配置

  继续考虑一个问题:我们在 Nacos 中的配置文件,为什么重启 Nacos 还是继续存在?

  这是因为 Nacos 自带一个嵌入式数据库 derby,我们可以更换成自己的 mysql。首先打开 Nacos 的所在文件夹:
在这里插入图片描述
  conf 里面有一个文件:
在这里插入图片描述
  打开可以看出,它就是我们 Nacos 中的数据表:
在这里插入图片描述
  我们在 mysql 中创建一个数据库叫做 nacos_config,然后执行这个 sql 文件:
在这里插入图片描述
  接着,修改 Nacos 的配置文件,让他把默认的 derby 切换成我们自己的 mysql:
在这里插入图片描述
  在文件的末尾,添加以下内容:

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

  除了 db.user 和 db.password ,其他的直接复制上面的即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值