云原生微服务实战 Spring Cloud Alibaba 之 Nacos
作者:mmseoamin日期:2023-12-05

系列文章目录

第一章 Java线程池技术应用

第二章 CountDownLatch和Semaphone的应用

第三章 Spring Cloud 简介

第四章 Spring Cloud Netflix 之 Eureka

第五章 Spring Cloud Netflix 之 Ribbon

第六章 Spring Cloud 之 OpenFeign

第七章 Spring Cloud 之 GateWay

第八章 Spring Cloud Netflix 之 Hystrix

第九章 代码管理gitlab 使用

第十章 SpringCloud Alibaba 之 Nacos discovery

云原生微服务实战 Spring Cloud Alibaba 之 Nacos,在这里插入图片描述,第1张


文章目录

  • 系列文章目录
    • @[TOC](文章目录)
    • 前言
    • 1、Nacos 的命名是由 3 部分组成
      • 1.1、技术升级和替换
      • 1.2、系统架构图
      • 2、Nacos两大组件
      • 3、Nacos 实现服务注册与发现的流程如下:
        • 3.1、下载软件
        • 3.2、服务提供者
        • 3.3、 服务消费者
        • 4、实战应用
          • 4.1、版本兼容说明
          • 4.2、Nacos server安装
          • 4.3、启动nacos
          • 4.4、工程改造
            • 4.4.1、父pom改造
            • 4.4.2、服务提供者改造
            • 4.4.3、服务消费者改造
            • 4.4.4、 Config配置
            • 4.4.5、调用者实例
            • 5、集成openFeign
              • 5.1、修改调用方配置文件
                • 5.1.1、增加springcloud依赖
                • 5.1.2、增加openFeign依赖项
                • 5.2、调用方代码改造
                  • 5.2.1、在启动类增加openFeign配置
                  • 5.2.2、新增服务层接口:UserService
                  • 5.2.3、改造控制层方法:
                  • 总结

                    前言

                    Nacos 英文全称为 Dynamic Naming and Configuration Service,它是一个开源的、易于使用的、功能强大的配置和发现管理系统,由阿里巴巴团队使用 Java 语言开发的开源项目。Nacos 为微服务架构提供了一种简单、灵活、动态的配置管理方案,可以支持大规模的分布式系统和云原生应用。它旨在提供动态服务发现、配置管理和服务管理等功能,帮助开发者构建易于扩展、动态适应的分布式系统。

                    1、Nacos 的命名是由 3 部分组成

                    组成部分全称描述
                    Nanaming/nameServer即服务注册中心,与 Spring Cloud Eureka 的功能类似。
                    coconfiguration即配置中心,与 Spring Cloud Config+Spring Cloud Bus 的功能类似。
                    sservice即服务,表示 Nacos 实现的服务注册中心和配置中心都是以服务为核心的。

                    1.1、技术升级和替换

                    前几章节我们介绍了Spring Cloud Netflix套件,今天开始我们升级成使用Spring Cloud Alibaba。

                    Spring Cloud Alibaba 的 Nacos discovery,会替换掉Spring Cloud Netflix 的 Eureka。

                    云原生微服务实战 Spring Cloud Alibaba 之 Nacos,在这里插入图片描述,第2张

                    1.2、系统架构图

                    整个电商微服务架构,选用Spring Cloud Alibaba套件,包括:

                    • 熔断限流(Spring Cloud Alibaba Sentinel)
                    • 微服务注册中心(Nacos Discovery)
                    • 微服务配置(Nacos Discovery Config)
                    • 微服务调用(Nacos Discovery)

                      再加上Spring Cloud组件:

                      • 负载均衡(openFeign)
                      • 网关(Gateway)
                      • 以及:

                        • 分库分表(Apache ShardingSphere-JDBC)
                        • 缓存集群(Redis主从)

                          云原生微服务实战 Spring Cloud Alibaba 之 Nacos,在这里插入图片描述,第3张

                          2、Nacos两大组件

                          组件描述功能
                          Nacos ServerNacos 服务端,与 Eureka Server 不同,Nacos Server 由阿里巴巴团队使用 Java 语言编写并将 Nacos Server 的下载地址给用户,用户只需要直接下载并运行即可。Nacos Server 可以作为服务注册中心,帮助 Nacos Client 实现服务的注册与发现。
                          Nacos Server 可以作为配置中心,帮助 Nacos Client 在不重启的情况下,实现配置的动态刷新。
                          Nacos ClientNacos 客户端,通常指的是微服务架构中的各个服务,由用户自己搭建,可以使用多种语言编写。Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-discovery,在服务注册中心(Nacos Server)中实现服务的注册与发现。
                          Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-config,在配置中心(Nacos Server)中实现配置的动态刷新。

                          云原生微服务实战 Spring Cloud Alibaba 之 Nacos,在这里插入图片描述,第4张

                          3、Nacos 实现服务注册与发现的流程如下:

                          3.1、下载软件

                          从 Nacos 官方提供的下载页面中,下载 Nacos Server 并运行。

                          3.2、服务提供者

                          Nacos Client 启动时,会把服务以服务名(spring.application.name)的方式注册到服务注册中心(Nacos Server)

                          3.3、 服务消费者

                          • Nacos Client 启动时,也会将自己的服务注册到服务注册中心;
                          • 服务消费者在注册服务的同时,它还会从服务注册中心获取一份服务注册列表信息,该列表中包含了所有注册到服务注册中心上的服务的信息(包括服务提供者和自身的信息);
                          • 在获取了服务提供者的信息后,服务消费者通过 HTTP 或消息中间件远程调用服务提供者提供的服务。

                            4、实战应用

                            4.1、版本兼容说明

                            https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

                            4.2、Nacos server安装

                            下载:

                            https://github.com/alibaba/nacos/releases/tag/2.0.4

                            云原生微服务实战 Spring Cloud Alibaba 之 Nacos,在这里插入图片描述,第5张

                            4.3、启动nacos

                            Nacos Server 下各目录说明如下:

                            • bin:用于存放 Nacos 的可执行命令。
                            • conf:用于存放 Nacos 配置文件。
                            • target:用于存放 Nacos 应用的 jar 包。

                              进入bin目录,执行启动命令:startup.cmd -m standalone

                              http://localhost:8848/nacos

                              用户名/密码:nacos/nacos

                              4.4、工程改造

                              4.4.1、父pom改造

                              
                                  org.springframework.cloud
                                  spring-cloud-dependencies
                                  2021.0.5
                                  pom
                                  import
                              
                              
                              
                                  com.alibaba.cloud
                                  spring-cloud-alibaba-dependencies
                                  2021.0.4.0
                              		pom
                                  import
                              
                              

                              4.4.2、服务提供者改造

                              • 添加依赖
                                
                                    com.alibaba.cloud
                                    spring-cloud-starter-alibaba-nacos-discovery
                                    2021.0.4.0
                                
                                
                                • 添加配置
                                  spring:
                                    application:
                                      name: app-provider-service #服务名
                                    cloud:
                                      nacos:
                                        discovery:
                                          server-addr: localhost:8848
                                  
                                  • 启动类加注解

                                    @EnableDiscoveryClient

                                    启动应用,查看nacos后台

                                    4.4.3、服务消费者改造

                                    • 添加依赖
                                      
                                          com.alibaba.cloud
                                          spring-cloud-starter-alibaba-nacos-discovery
                                          2021.0.4.0
                                      
                                      
                                      • 添加配置
                                        spring:
                                          application:
                                            name: app-api-service #服务名
                                          cloud:
                                            nacos:
                                              discovery:
                                                server-addr: localhost:8848  #Nacos server 的地址
                                        
                                        • 启动类添加注解

                                          @EnableDiscoveryClient

                                          4.4.4、 Config配置

                                          创建config文件夹,在下面添加LoadBalancedConfig配置

                                          import org.springframework.cloud.client.loadbalancer.LoadBalanced;
                                          import org.springframework.context.annotation.Bean;
                                          import org.springframework.context.annotation.Configuration;
                                          import org.springframework.web.client.RestTemplate;
                                          @Configuration
                                          public class LoadBalancedConfig {
                                              @Bean
                                              @LoadBalanced
                                              public RestTemplate restTemplate() {
                                                  return new RestTemplate();
                                              }
                                          }
                                          

                                          4.4.5、调用者实例

                                          import org.springframework.beans.factory.annotation.Autowired;
                                          import org.springframework.web.bind.annotation.GetMapping;
                                          import org.springframework.web.bind.annotation.RequestMapping;
                                          import org.springframework.web.bind.annotation.RestController;
                                          import org.springframework.web.client.RestTemplate;
                                          import java.util.Map;
                                          @RestController
                                          @RequestMapping("/user")
                                          public class UserController {
                                              private final static String SERVER_URL = "http://localhost:8080";
                                              @Autowired
                                              private RestTemplate restTemplate;
                                              @GetMapping("/getUserName")
                                              public Map getUserName() {
                                                  String url = SERVER_URL + "/user/getUserName";
                                                  Map map = restTemplate.getForObject(url , Map.class);
                                                  map.put("type" , "caller");
                                                  return map;
                                              }
                                          }
                                          

                                          5、集成openFeign

                                          5.1、修改调用方配置文件

                                          5.1.1、增加springcloud依赖

                                          
                                              
                                                  
                                                  
                                                      org.springframework.cloud
                                                      spring-cloud-dependencies
                                                      2021.0.5
                                                      pom
                                                      import
                                                  
                                                  
                                                  
                                                      com.alibaba.cloud
                                                      spring-cloud-alibaba-dependencies
                                                      2021.0.4.0
                                                      pom
                                                      import
                                                  
                                              
                                          
                                          

                                          5.1.2、增加openFeign依赖项

                                          
                                              
                                                  org.springframework.boot
                                                  spring-boot-starter-web
                                              
                                              
                                                  com.alibaba.cloud
                                                  spring-cloud-starter-alibaba-nacos-discovery
                                              
                                              
                                                  org.springframework.cloud
                                                  spring-cloud-starter-openfeign
                                              
                                              
                                              
                                                  org.springframework.cloud
                                                  spring-cloud-starter-loadbalancer
                                              
                                          
                                          

                                          5.2、调用方代码改造

                                          5.2.1、在启动类增加openFeign配置

                                          @EnableFeignClients

                                          5.2.2、新增服务层接口:UserService

                                          import com.xxx.common.entity.User;
                                          import org.springframework.cloud.openfeign.FeignClient;
                                          import org.springframework.web.bind.annotation.GetMapping;
                                          @FeignClient(name = "app-provider-service")
                                          public interface UserService {
                                              @GetMapping("/user/getUserName")
                                              public User getUserName() ;
                                          }
                                          

                                          5.2.3、改造控制层方法:

                                          @Autowired
                                          private UserService userService;
                                          @GetMapping("/getUserName")
                                          public Map getUserName() {
                                              User user = userService.getUserName();
                                              Map map = new HashMap();
                                              map.put("code" , 200);
                                              map.put("data" , user);
                                              map.put("type" , "caller");
                                              return map;
                                          }
                                          

                                          总结

                                          云原生微服务治理有很多手段,但在Java生态里,最主流的还是Spring Cloud Alibaba 、Spring Cloud Netflix。

                                          Spring Cloud文章的前部分已经把Spring Cloud Netflix相关组件讲解且实践过了,这章我们讲解了Spring Cloud Alibaba的Nacos discovery,后续还会继续讲解完Spring Cloud Alibaba其他组件。