Spring Cloud Alibaba组件之Nacos(spring cloud alibaba 从入门到实战)

  本篇文章为你整理了Spring Cloud Alibaba组件之Nacos(spring cloud alibaba 从入门到实战)的详细内容,包含有spring cloud alibaba架构 spring cloud alibaba 从入门到实战 springcloud nacos集群 spring cloud alibaba 2020 Spring Cloud Alibaba组件之Nacos,希望能帮助你了解 Spring Cloud Alibaba组件之Nacos。

  目录结构:

   一、Spring Cloud Alibaba简介

   二、使用版本情况

   三、什么是Nacos?

   四、Nacos运行环境部署

   五、Nacos注册中心

   六、Nacos命名空间和分组

   七、Nacos配置中心

   八、基于profile多环境配置

   九、Nacos配置中心动态刷新

   十、Nacos数据持久化

   十一、Nacos集群部署

  一、Spring Cloud Alibaba简介:

  Spring Cloud Alibaba是Spring Cloud下的一个子项目,Spring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案,它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序,使用Spring Cloud Alibaba,您只需要添加一些注解和少量配置即可将Spring Cloud应用程序整合Alibaba的分布式解决方案,并使用Alibaba中间件构建分布式应用程序系统。

  二、使用版本情况

  1、项目所使用的的版本

  
三、什么是Nacos?

  Nacos是阿里巴巴2018年7月推出来的一个开源项目,是一个构建微服务应用的服务注册与发现、配置管理平台;

  Nacos 属于Spring Cloud Alibaba下的一个组件;

  Nacos 约等于 Spring Cloud Eureka(注册中心)+ Spring Cloud Config(配置中心)

  Nacos官网:https://nacos.io/

  四、Nacos运行环境部署

  服务端(部署一个nacos-server)+ 客户端(你的各个服务)

  步骤:

   1、下载Nacos的二进制压缩包

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

   2、解压下载下来的Nacos的二进制压缩包

   tar -zxvf nacos-server-2.0.4.tar.gz

   3、启动nacos server

   [root@localhost bin]# ./startup.sh -m standalone

   注:单机环境必须带-m standalone参数启动,否则无法启动,不带参数启动的是集群环境

   4、访问nacos的web客户端地址:http://ip地址:8848/nacos

   使用默认的用户名:nacos、密码:nacos

   5、关闭nacos server

   [root@localhost bin]# ./shutdown.sh

  五、Nacos注册中心

  Nacos注册中心可以说是类似于Eureka-server的功能

  微服务开发是controller调用controller,调用者是服务消费者,被调用者是服务提供者,服务消费者和服务提供者是相对概念,服务消费者也可以被另一个服务调用,那么此时的服务消费者也是一个服务提供者;

  在实际开发中,我们会把所有服务都注册到nacos注册中心上,由nacos去维护和管理我们的所有服务。

  5.1、实现服务提供者

  1、pom.xml 文件中引入Nacos Discovery Starter依赖

  

 dependency 

 

   groupId com.alibaba.cloud /groupId

   artifactId spring-cloud-starter-alibaba-nacos-discovery /artifactId

   version 2.2.9.RELEASE /version

   /dependency

 

  2、配置文件application.yml中添加Nacos Server地址

  

spring:

 

   cloud:

   nacos:

   discovery:

   server-addr: http://ip地址:8848/nacos

   username: nacos

   password: nacos

   application:

   name: nacos-provider

 

  注意:如果不想使用Nacos作为你的服务注册与发现,可以将spring.cloud.nacos.discovery.enabled设置为false。

  3、启动项目,此时就可以在Nacos的web管控台上看到注册上来的服务信息了;

  5.2、实现服务消费者

  消费者应用比提供者应用要稍微复杂一点,因为在消费端需要去调用提供者提供的REST服务,此时需要用到RestTemplate、OpenFeign及负载均衡Spring Cloud LoadBalancer。

  1、添加OpenFeign、Nacos Discovery Starter依赖

  

 dependency 

 

   groupId com.alibaba.cloud /groupId

   artifactId spring-cloud-starter-alibaba-nacos-discovery /artifactId

   version 2.2.9.RELEASE /version

   /dependency

   dependency

   groupId org.springframework.cloud /groupId

   artifactId spring-cloud-starter-openfeign /artifactId

   /dependency

 

  2、配置文件application.yml中添加Nacos Server地址

  

spring:

 

   cloud:

   nacos:

   discovery:

   server-addr: http://ip地址:8848/nacos

   username: nacos

   password: nacos

   application:

   name: nacos-consumer

 

  3、新建Feign接口,调用服务提供者

  

// nacos-provider是服务提供者的应用名,也就是注册到Nacos中的应用名

 

  @FeignClient(value = "nacos-provider")

  public interface ProductFeign {

   // 服务提供者对应的controller接口

   @GetMapping("/product/{id}")

   Product getProduct(@PathVariable("id") Integer id);

  }

 

  4、服务消费者接口实现类中注入Feign对象,调用服务提供者

  

@Service

 

  public class OrderServiceImpl implements OrderService {

   @Resource

   private OrderDao orderDao;

   @Resource

   private ProductFeign productFeign;

   @Override

   public int addOrder(Integer id) {

   // 注入Feign接口对象,调用服务提供者接口

   Product product = productFeign.getProduct(id);

   int result = 0;

   if (product != null) {

   Order order =

   Order.builder().orderName("我购买的").orderMoney(new BigDecimal(1000)).productId(1).orderStatus(0).memberId(1001).build();

   result = orderDao.addOrder(order);

   return result;

  }

 

  六、Nacos命名空间和分组

  6.1、命名空间:用于隔离每一个微服务的外部应用配置,每一个微服务都可以有自己单独的配置环境。默认新增的所有服务都在public空间(保留空间)。

  新建命名空间,每一个服务都可以创建一个命名空间

  6.2、配置分组:默认所有的配置都属于:DEFAULT_GROUP

  每个微服务创建自己的命名空间,使用配置分组区分环境:开发环境dev,测试环境test以及生产环境prod等

  创建分组:选择对应的命名空间,点击“+”创建分组配置

  七、Nacos配置中心

  Nacos配置中心类似于Spring Cloud Config的功能

  Spring Cloud Config 使用git仓库存储配置文件,程序员自己创建config-server的服务器,把各个微服务作为客户端

  Nacos 作为配置中心,配置的信息存储到服务端,就是Nacos。Nacos提供用于存储配置数据功能,为分布式系统中的配置数据提供服务器端和客户端支持,使用Spring Cloud Alibaba Nacos Config就可以在Nacos Server集中管理Spring Cloud应用的外部属性配置;

  Spring Cloud Alibaba Nacos config是在启动的bootstrap阶段,将配置加载到Spring环境中;

  通过bootstrap.properties(bootstrap.yml)启动我们的微服务

  6.1、基于Nacos配置中心构建微服务应用

  步骤:

  1、pom文件中添加Nacos Config依赖

  

 dependency 

 

   groupId com.alibaba.cloud /groupId

   artifactId spring-cloud-starter-alibaba-nacos-config /artifactId

   version 2.2.9.RELEASE /version

   /dependency

   dependency

   groupId org.springframework.cloud /groupId

   artifactId spring-cloud-starter-bootstrap /artifactId

   version 3.1.5 /version

   /dependency

 

  2、项目配置文件bootstrap.yml中

  Spring Cloud Alibaba Nacos Config会根据命名空间、DataId、GROUP以及文件后缀名确定唯一一个配置

  

spring:

 

   cloud:

   nacos:

   config:

   server-addr: http://ip地址:8848/nacos

   username: nacos

   password: nacos

   namespace: e769b2bd-5082-4829-82a5-3c98ee6cf758

   group: dev-group

   file-extension: properties

   application:

   name: config-server

 

  3、Nacos中添加外部配置文件

  4、客户端通过nacos调用外部配置文件,拿到相应的属性值

  

@RestController

 

  public class ConfigController {

   @Value("${user.info.username}")

   private String username;

   @Value("${user.info.password}")

   private String password;

   @GetMapping("/user/info")

   public String getUserInfo(){

   return username + ": " + password;

  }

 

  八、基于profile多环境配置

  nacos配置中心在加载配置的时候,不仅仅加载了以 dataid为${spring.application.name}.${file-extension:properties}的基础配置,还加载了dataid为${spring.application.name}-${profile}.${file-extension:properties}的基础配置;

  在日常开发中如果遇到多套环境下的不同配置,可以通过Spring提供的${spring.profiles.active}配置项来激活使用某个配置文件;

  1、在Nacos中创建两个配置文件

  2、修改项目的配置文件bootstrap.yml

  

spring:

 

   cloud:

   nacos:

   config:

   server-addr: http://192.168.0.130:8848/nacos

   username: nacos

   password: nacos

   namespace: e769b2bd-5082-4829-82a5-3c98ee6cf758

   group: user-group

   file-extension: properties

   application:

   name: config-server

   profiles:

   active: dev

 

  如果需要切换到测试环境,只需要更改${spring.profiles.active}参数配置即可,如下所示:

  spring.profiles.active=test

  九、Nacos配置中心动态刷新

  Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发org.springframework.cloud.context.refresh.ContextRefresher的refresh 方法;

  可以通过配置spring.cloud.nacos.config.refresh.enabled=false来关闭动态刷新;

  controller 加上以下注解

  

@RestController

 

  @RefreshScope

  public class ConfigController {

   @Value("${user.info.username}")

   private String username;

   @Value("${user.info.password}")

   private String password;

   @GetMapping("/user/info")

   public String getUserInfo(){

   return username + ": " + password;

  }

 

  十、Nacos数据持久化

  参考网址:https://nacos.io/zh-cn/docs/deployment.html

  Nacos默认情况下是采用apache derby内嵌数据库进行数据存储,在单机模式时可以使用nacos嵌入式数据库实现数据存储,但是derby数据库不方便观察数据存储的基本情况,从acos 0.7版本开始增加了支持mysql数据源能力;

  具体操作步骤:

  第一步:安装数据库,版本要求:5.6.5+;

  第二步:初始化MySQL数据库(也就是生成对应的数据库和表),数据库初始化文件: nacos-mysql.sql,该文件可以在Nacos程序包下的 conf目录下获得

  第三步:修改 conf/application.properties文件,增加支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码

  

#*************** Config Module Related Configurations ***************#

 

   32 ### If use MySQL as datasource:

   33 spring.datasource.platform=mysql

   35 ### Count of DB:

   36 db.num=1

   38 ### Connect URL of DB:

   39 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8 connectTimeout=1000 socketTimeout=3000 autoReconnect=true useUnicode=true useSSL=false serverTimezone=Asia/Shanghai

   40 db.user.0=root

   41 db.password.0=123456

 

  第四步:然后启动nacos(还是单机启动),此时发现nacos所有嵌入式数据库的数据都写到了mysql;

  十一、Nacos集群部署

  具体配置步骤:

  1、准备三个nacos,3个或3个以上Nacos节点才能构成集群;

  2、在Nacos的conf目录下有一个cluster.conf.example,可以直接把example扩展名去掉来使用,也可以单独创建一个cluster.conf文件,然后在该文件中每行配置一个ip:port;

  端口号需要和对应nacos的文件application.properties中的端口号一致

  3、按照上面nacos持久化的方式配置好数据持久化到MySQL,生产使用建议至少主备模式,或者采用高可用数据库

  4、启动测试;

  集群下客户端怎么连?

  第一种:可以在单机的基础上加多个IP和端口中间用逗号隔开;

  

spring:

 

   cloud:

   nacos:

   config:

   server-addr: http://ip地址1:8848/nacos,http://IP地址2:8848/nacos,http://ip地址3:8848/nacos

   username: nacos

   password: nacos

   namespace: e769b2bd-5082-4829-82a5-3c98ee6cf758

   group: user-group

   file-extension: properties

   application:

   name: config-server

   profiles:

   active: dev

 

  第二种:配合Nginx代理我们的Nacos集群,配置里就直接写Nginx的IP和端口即可;

  

  以上就是Spring Cloud Alibaba组件之Nacos(spring cloud alibaba 从入门到实战)的详细内容,想要了解更多 Spring Cloud Alibaba组件之Nacos的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: