微服务之Spring cloud alibaba入门——Nacos篇

微服务之Spring cloud alibaba入门——Nacos篇

一. 官网简介

Nacos官网链接

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos的关键特性包括:

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态 DNS 服务
  • 服务及其元数据管理
二. Nacos安装
  • 方式一:Window安装Nacos
  1. 准备基本环境
    保证电脑为64位系统、jdk1.8+、Maven 3.2.x+、
  2. 从 Github 上下载编译后压缩包并解压
    下载地址
  3. 测试运行
    进入到bin目录下,双击startup.cmd运行Nacos,在服务器中输入http://localhost:8848/nacos测试,出现Nacos的管理界面则说明环境搭建成功
  • 方式二:虚拟机Linux系统基于docker搭建Nacos集群
  1. 准备基本环境
    docker、docker-compose 、git
  2. 下载nacos
    使用以下命令下载nacos,生成目录nacos-docker
    git clone https://github.com/nacos-group/nacos-docker.git
  3. 准备cluster-hostname.yaml文件
    进入nacos-docker/example目录下,打开cluster-hostname.yaml文件,其集群配置如下:
version: "3"
services:
  nacos1:
    hostname: nacos1
    container_name: nacos1
    image: nacos/nacos-server:latest
    volumes:
      - ./cluster-logs/nacos1:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9555:9555"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql

  nacos2:
    hostname: nacos2
    image: nacos/nacos-server:latest
    container_name: nacos2
    volumes:
      - ./cluster-logs/nacos2:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8849:8848"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql
  nacos3:
    hostname: nacos3
    image: nacos/nacos-server:latest
    container_name: nacos3
    volumes:
      - ./cluster-logs/nacos3:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8850:8848"
    env_file:
      - ../env/nacos-hostname.env
    restart: always
    depends_on:
      - mysql
  mysql:
    container_name: mysql
    image: nacos/nacos-mysql:5.7
    env_file:
      - ../env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"

  1. 启动Nacos
    在nacos-docker目录下用以下命令启动Nacos集群

docker-compose -f example/cluster-hostname.yaml up

三. Nacos——服务提供者

配置两个服务提供者,端口号分别为8510和8511,除了端口其他配置完全相同,此处只记录8511的配置。

  1. 引入依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 编写application.yml配置文件
server:
  port: 8510
spring:
  application:
    name: alibaba-nacos-provider
  cloud:
    nacos:
      discovery:
        #本地nacos地址,集群配置:http://192.168.192.129:8848,http://192.168.192.129:8849,http://192.168.192.129:8850
        server-addr: localhost:8848  
management:
  endpoints:
    web:
      exposure:
        include: '*'
  1. 编写主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Nacos8510Application {
    public static void main(String[] args) {
        SpringApplication.run(Nacos8510Application.class, args);
    }
}
  1. 编写测试类
    该类用于测试Nacos的负载均衡功能,在请求时会返回相应服务的端口号
@RestController
public class HelloController {
    @Value("${server.port}")
    private String ports;
    @RequestMapping(value = "/nacos/{id}", method = RequestMethod.GET)
    public String hello(@PathVariable("id") Integer id) {
        return "Hello Nacos Discovery:"+ports+",id为:"+id;
    }
}
四. Nacos——服务消费者
  1. 引入依赖
    和服务提供者的依赖完全相同
  2. 编写application.yml
server:
  port: 8610
spring:
  application:
    name: alibaba-nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #配置nacos的地址
  1. 编写主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Nacos8610Application {
    public static void main(String[] args) {
        SpringApplication.run(Nacos8610Application.class,args);
    }
}
  1. 编写RestTemplate配置类
@Configuration
public class RestConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
  1. 编写调用类
    表示调用alibaba-nacos-provider服务的nacos/id方法
@RestController
public class HelloController {
    @Resource
    private RestTemplate template;
    @GetMapping("/consumer/nacos/{id}")
    public String hello(@PathVariable("id") Integer id){
        return template.getForObject("http://alibaba-nacos-provider/nacos/"+id,String.class);
    }
}
五. Nacos——配置中心

spring cloud实现配置中心所用的技术为spring cloud config,若要实现配置动态刷新则需要配合spring cloud bus。而Nacos也可作为配置中心,而且可以很方便的实现配置的动态刷新,以下用来创建一个拉取Nacos配置的Springboot项目。
配置中心的基本名词介绍:

名称简介
namespace命名空间,初始有一个public命名空间,public不可以删除
group组,不同的命名空间下会有不同的组
dataid配置名称,不同的组下会有不同的配置
  1. 引入依赖
<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>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 创建配置文件
    该项目拉取的是Nacos中保存的配置,那么该配置需要相关人员提前编好放到服务器上面,那么其配置的命名必须要遵守一定的格式,该dataid有两种命名方案:

    • 格式一:{prefix}-{spring.profile.active}.{file-extension}
    • 格式二:{prefix}.{file-extension}

    prefix在bootstrap.yml中配置,默认为应用名;spring.profile.active在application.yml中配置,file-extension也在bootstrap.yml中配置,为要拉取的配置文件后缀名

    以下为配置文件的内容

    属性内容
    Data IDnacos-config-client-dev.yaml
    GroupDEFAULT_GROUP
    配置内容config.info=“Hello Nacos dev version=1”(修改为对应的yml格式)
  2. 修改application.yml配置

spring:
  profiles:
    active: dev   # 代表拉取的是dev文件
  1. 编写bootstrap.yml配置文件
server:
  port: 3377
spring:
  application:
    name: nacos-config-client   # 对应配置中心配置文件的prefix
  cloud:
    nacos:
      discovery: # 注册中心的地址
        server-addr: http://192.168.192.129:8848,http://192.168.192.129:8849,http://192.168.192.129:8850
      config:  #配置中心的地址
        server-addr: http://192.168.192.129:8848,http://192.168.192.129:8849,http://192.168.192.129:8850   #配置中心的地址
        file-extension: yaml   # 要拉取的配置文件后缀
        # namespace: ssad    可以配置命名空间id,默认为public
        group: DEFAULT_GROUP  #配置分组,默认为DEFAULT_GROUP
  1. 编写主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Config3377Application {
    public static void main(String[] args) {
        SpringApplication.run(Config3377Application.class,args);
    }
}
  1. 编写测试类
    config.info是配置文件中的属性,若成功拉取到了配置,那么调用该方法会将该信息返回到页面,添加了@RefreshScope注解就实现了配置的自动刷新。
@RestController
@RefreshScope   //默认实现了配置自动刷新
public class InfoController {

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

    @GetMapping(value = "/info")
    public String getInfo(){
        return info;
    }
}
六. 服务注册中心对比

在这里插入图片描述

七. 下一篇介绍

本文简要介绍了alibaba Nacos的使用,下面讲对Alibaba sentinel进行介绍。
在这里插入图片描述


版权声明:本文为NWU_LK原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。