• 【云原生】SpringCloud Alibaba 之 Nacos注册中心实战


    文章目录

    一、什么是注册中心?

    注册中心, 也称命名服务(Naming servive), 它的核心功能与DNS服务类似, 无非就是通过一个特定的名字来查找相关的实例集合, 但是它们也有很多不同点

    二、Eureka 和 Nacos 的区别

    Nacos与eureka的共同点

    • 都支持服务注册和服务拉取
    • 都支持服务提供者心跳方式做健康检测

    Nacos与Eureka的区别

    • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
    • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

    三、什么是 SpringCloud Alibaba?

    Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。

    Spring Cloud Alibaba 是新一代微服务解决方案,它在Spring Cloud 的基础上进行了升级

    Spring Cloud Alibaba 吸收了 Spring Cloud Netflix 的核心架构思想,并进行了高性能改进。自 Spring Cloud Netflix 进入停更维护后,Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架。

    四、安装 Nacos 并启动

    安装Nacos

    Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

    在这里插入图片描述

    下载nacos

    nacosGitHub下载地址

    在这里插入图片描述

    下载ZIP文件完成后,我们解压ZIP压缩包,这里我用的是 1.4.1,我把这个放到百度网盘了,需要自取 nacos安装包 链接自带密码,无需输入

    解压文件

    在这里插入图片描述

    Nacos的默认端口是8848,如果你的电脑已经占用了8848,可以根据以下方式修改端口号

    修改端口号

    进入 conf 配置文件夹打开 application.properties 文件

    在这里插入图片描述

    配置端口号

    在这里插入图片描述

    启动Nacos

    退回到nacos文件夹,进入 bin文件夹,单击上方文件地址,输入 cmd 进入DOS窗口启动

    在这里插入图片描述

    输入startup.cmd -m standalone命令启动

    在这里插入图片描述

    启动成功,输入网址测试

    在这里插入图片描述

    成功访问

    在这里插入图片描述

    五、Nacos 实战之 服务注册

    需求明细:

    • 采用Maven 聚合工程搭建微服务架构,新建2个微服务,一个为订单服务,一个为用户服务

    • 创建两张数据表,一个为订单表,一个为用户表

    • 引入Maven 依赖,Spring Cloud Alibaba 相关依赖,将服务注册至Nacos注册中心

    • 订单服务可根据订单号查询出关联的用户,这里需要远程调用,使用 Spring Cloud Alibaba 的 FeignClient功能

    • 公共模块管理相关依赖,子模块引入具体所需依赖即可

    所需数据表

    tb_user

    CREATE TABLE `tb_user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `username` varchar(100) DEFAULT NULL COMMENT '收件人',
      `address` varchar(255) DEFAULT NULL COMMENT '地址',
      PRIMARY KEY (`id`) USING BTREE,
      UNIQUE KEY `username` (`username`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    tb_order

    CREATE TABLE `tb_order` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单id',
      `user_id` bigint(20) NOT NULL COMMENT '用户id',
      `name` varchar(100) DEFAULT NULL COMMENT '商品名称',
      `price` bigint(20) NOT NULL COMMENT '商品价格',
      `num` int(10) DEFAULT '0' COMMENT '商品数量',
      PRIMARY KEY (`id`) USING BTREE,
      UNIQUE KEY `username` (`name`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    核心依赖

    项目结构

    在这里插入图片描述

    目录解释

    • nacos-demo :整体Maven工程父级工程,该工程包括了整个微服务架构,把共有依赖放入该目录下,子级继承即可
    • nacos-user-service:nacos用户服务,内部主要实现查询用户的接口,用于order服务调用
    • nacos-order-service:nacos订单服务,内部实现通过订单号查询相关信息,通过 FeignClient远程调用 user 服务

    nacos-demo 及子级依赖

    nacos-demo父级工程

    pom
    
        
            org.springframework.boot
            spring-boot-starter-parent
            2.3.9.RELEASE
            
        
    
        
            UTF-8
            UTF-8
            1.8
            Hoxton.SR10
            5.1.47
            2.1.1
        
    
        
            
                
                
                    org.springframework.cloud
                    spring-cloud-dependencies
                    ${spring-cloud.version}
                    pom
                    import
                
                
                
                    mysql
                    mysql-connector-java
                    ${mysql.version}
                
                
                
                    org.mybatis.spring.boot
                    mybatis-spring-boot-starter
                    ${mybatis.version}
                
    
                
                    com.alibaba.cloud
                    spring-cloud-alibaba-dependencies
                    2.2.6.RELEASE
                    pom
                    import
                
    
            
        
        
            
                org.projectlombok
                lombok
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    效果图

    在这里插入图片描述

    核心源码

    nacos-order-service核心代码

    UserClient

    @FeignClient("userService")
    public interface UserClient {
    
        @GetMapping("/user/{id}")
        User findById(@PathVariable("id") Long id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    OrderService

    @Service
    public class OrderService {
    
        @Autowired
        private OrderMapper orderMapper;
    
        @Autowired
        private UserClient userClient;
    
        public Order queryOrderById(Long orderId) {
            //1. 查询订单
            Order order = orderMapper.findById(orderId);
            //2. 查询用户
            User user = userClient.findById(order.getUserId());
            order.setUser(user);
            return order;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    nacos-user-service

    UserService

    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
    
        public User findById(Long id) {
            return userMapper.findById(id);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    UserController

    @Slf4j
    @RestController
    @RequestMapping("/user/")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @GetMapping("{id}")
        public User findById(@PathVariable("id") Long id) {
            return userService.findById(id);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    服务注册

    服务注册到nacos注册中心,在 application.yaml 文件内配置如下

      application:
        name: userService
    
    • 1
    • 2

    xml已添加如下nacos依赖

    
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-config
            
    
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    启动测试

    启动后如下界面,再次查看服务列表即可
    在这里插入图片描述

    六、IDEA 调出 services 服务实例列表

    在启动时如果没有services 服务列表,我们需要去调出来,这样方便我们启动以及调试项目

    View —> Tool Windows —> Services

    在这里插入图片描述

    如果没有服务列表的话,那么我们要添加服务,SpringBoot

    在这里插入图片描述

    添加Spring Boot 服务

    选择类型
    在这里插入图片描述

    添加服务

    在这里插入图片描述

    添加成功,如下界面

    在这里插入图片描述

    小结

    以上就是【】对 【云原生】SpringCloud Alibaba 之 Nacos注册中心实战 的简单介绍,Spring Cloud Alibaba 是目前比较火的微服务中间件,很强大,必须吃透!

    如果这篇【文章】有帮助到你,希望可以给【】点个赞??,创作不易,如果有对【后端技术】、【前端领域】感兴趣的小可爱,也欢迎关注 【】,我将会给你带来巨大的【收获与惊喜】???!

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    android Google官网 :支持不同的语言和文化 rtl / ltr : 本地化适配:RTL(right-to-left) 适配
    QT串口调试助手V2.0(源码全开源)--上位机+多通道波形显示+数据保存(优化波形显示控件)
    MongoDB入门与实战-第四章-SpringBoot集成MongoDB
    8个Tips、16种应用场景电子邮件写作模板,提高外贸邮件回复率!
    如何让一颗芯片提前出厂打工
    Metabase学习教程:仪表盘-1
    Execute Crond Service on openEuler
    Java的反射机制
    USB到UART桥接控制器——GP232RNL
    如何把pdf拆分成多个文件?
  • 原文地址:https://blog.csdn.net/m0_67392661/article/details/126080735