1.nacos注册与发现及源码注册流程

目录

  • 概述
  • nacos工程案例
    • nacos服务注册案例
      • 版本说明
      • 本地启动 nacos-server
      • 搭建 spring cloud alibaba 最佳实践
        • 服务注册案例
        • 服务订阅案例
    • nacos注册源码流程
      • 源码关键点
      • 技巧
  • 结束

概述

通过本文,学会如何确定项目组件版本(减少可能出现的jar包冲突),nacos的注册与发现及其源码执行流程。

重点如下:

  • 如何确定微服务工程组件版本
  • 如何服务注册
  • 如何阅读源码

nacos工程案例

nacos服务注册案例

  • 源码地址:https://github.com/alibaba/spring-cloud-alibaba
  • 版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
  • 本地启动 nacos-server
  • 搭建 spring cloud alibaba 最佳实践
  • long-cloud-provider 关键 pom 引用

版本说明

后续组件使用的版本如下:
在这里插入图片描述在这里插入图片描述

**总结:**spring cloud 2021.0.5 、spring-cloud-alibaba 2021.0.5.0、spring-boot 2.6.13、nacos 2.2.0(因为本地mac系统版本低报错)、sentinel 、rocket mq 、seata 会根据约束自动加载。

本地启动 nacos-server

nacos源码搭建将使用 nacos 2.0.0 版本,

mac 系统低于此版本,2.x 出现如下问题。
在这里插入图片描述
所以暂时不提供,如果编译过程中有问题,欢迎留言。

搭建 spring cloud alibaba 最佳实践

服务注册案例

pom.xml 重要配置如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.13</version>
</parent>

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <spring-cloud.version>2021.0.5</spring-cloud.version>
    <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

main 方法

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

controller

@RestController
public class NacosRegistryProviderController {

    @GetMapping("/hello/{id}")
    public String echo(@PathVariable String id) {
        return "NacosProvider receive args: id=" + id + ",date:"
                + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }
}

配置文件

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 10.xx.xx.142
server:
  port: 9010

pom.xml 配置

 <dependencies>
     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-bootstrap</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
 </dependencies>

在这里插入图片描述

服务订阅案例

服务订阅 与 服务注册案例基本上配置相同

main 方法

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class);
    }
    
	@LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

controller

@RestController
public class NacosDiscoveryConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello/{id}")
    public String echo(@PathVariable String id) {
        return restTemplate.getForObject("http://nacos-provider/hello/" + id, String.class);
    }
}

pom.xml

注意加上一个jar包,否则不能识别 微服务

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

在这里插入图片描述

nacos注册源码流程

源码关键点

注意: 为了解决其它流程影响正常 debug 源码,参考以下断点。通过下面关键断点,可以避开其它流程的影响,然后查看堆栈,基本可以理清 nacos 源码注册流程。

org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration#onApplicationEvent
com.alibaba.cloud.nacos.registry.NacosServiceRegistry#register

涉及监听器相关源码请移步 spring boot 事件机制
在这里插入图片描述
在这里插入图片描述

技巧

源码阅读是有一定的技巧的,在以后的文章中会慢慢讲述,今天讲述一个报错查看 nacos 源码注册流程。

org.springframework.boot.SpringApplication.run(SpringApplication.java:1317) ~[spring-boot-2.6.13.jar:2.6.13]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.6.13.jar:2.6.13]
	at com.fun.ms.NacosRegistryProviderApplication.main(NacosRegistryProviderApplication.java:11) ~[classes/:na]
Caused by: java.lang.reflect.UndeclaredThrowableException: null
	at org.springframework.util.ReflectionUtils.rethrowRuntimeException(ReflectionUtils.java:147) ~[spring-core-5.3.23.jar:5.3.23]
	at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:83) ~[spring-cloud-starter-alibaba-nacos-discovery-2021.0.5.0.jar:2021.0.5.0]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:123) ~[nacos-client-2.2.0.jar:na]
	at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:98) ~[nacos-client-2.2.0.jar:na]
	at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:152) ~[nacos-client-2.2.0.jar:na]
	at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:75) ~[spring-cloud-starter-alibaba-nacos-discovery-2021.0.5.0.jar:2021.0.5.0]
	... 27 common frames omitted

在这里插入图片描述
上术方法就是源码调试时,走的流程。

结束

nacos 注册与发现及源码注册流程至此就结束了,如有疑问,欢迎评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/229683.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

临床骨科常用的肩关节疾病量表,医生必备!

根据骨科医生的量表使用情况&#xff0c;常笑医学整理了临床骨科常用的肩关节疾病量表&#xff0c;为大家分享临床常见的肩关节疾病量表评估内容&#xff0c;均支持量表下载和在线使用&#xff0c;建议收藏&#xff01; 1.臂、肩、手功能障碍&#xff08;disabilites of the ar…

Fiddler抓包模拟器(雷电模拟器)

Fiddler设置 List item 打开fiddler,的options 点击OK,重启fiddler 模拟器 更改网络设置 IP可以在电脑上终端上查看 然后在模拟器浏览器中输入IP:端口 安装证书

机房动力环境智能监控系统

机房动力环境智能监控系统是指利用先进的传感器技术、通信技术、数据处理技术和信息安全技术等&#xff0c;依托电易云-智慧电力物联网对机房的动力设备和环境进行实时监测、数据采集、数据分析、故障预警和远程管理&#xff0c;以实现机房的高效运行和安全保障。 该系统主要包…

【Vue3从入门到项目实现】RuoYi-Vue3若依框架前端学习——动态路由与菜单栏

菜单栏 若依框架的侧边栏组件通常由菜单项和子菜单组成。 登录后&#xff0c;会获取用户拥有的路由菜单 {"msg": "操作成功","code": 200,"data": [{"name": "System","path": "/system",…

初识Linux:权限(1)

目录 提示&#xff1a;以下指令均在Xshell 7 中进行 Linux 的权限 内核&#xff1a; 查看操作系统版本 查看cpu信息 查看内存信息 外部程序&#xff1a; 用户&#xff1a; 普通用户变为超级用户&#xff1a; su 和 su-的区别&#xff1a; root用户变成普通用户&#…

Proteus仿真--基于ADC0808设计的调温报警器

本文介绍基于ADC0808实现的调温报警器设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 温度调节使用滑动变阻器模拟实现&#xff0c;ADC0808采集信号并输出在LCD上面显示&#xff0c;报警系统是LED灯和蜂鸣器实现声光电报警 仿真图如下 仿真运行视频 Proteus仿真…

[网鼎杯 2020 朱雀组]phpweb1

提示 call_user_func()函数先通过php内置函数来进行代码审计绕过system&#xff08;##不止一种方法&#xff09; 拿到题目养成一个好的习惯先抓个包 从抓到的包以及它首页的报错来看&#xff0c;这里死活会post传输两个参数func以及p func传输函数&#xff0c;而p则是传输参数的…

【智能家居】六、摄像头安装实现监控功能点、人脸识别(face_recognition的使用)

一、定义及第三方库的说明 OCR &#xff08;光学字符识别&#xff09;文字识别、图像识别mjpg-streamer实时流式传输视频工具树莓派mjpg-streamer Face Recognition人脸识别 Dlib 计算机视觉问题的工具和算法face_recognition库OpenCV 计算机视觉和机器学习的开源库 三、香…

Centos7、Mysql8.0 load_file函数返回为空的终极解决方法--暨selinux的深入理解

零、问题背景 最近想换房&#xff0c;为了方便自己对比感兴趣的房子&#xff0c;因此决定将目标房源的基本信息放在表里&#xff0c;特别是要一目了然的看到众多房子的各种图纸和照片&#xff0c;因此决定要在Mysql8.0.34数据库中以二进制形式保存图片&#xff08;抛开合理性和…

Python Authlib库:构建安全可靠的身份验证系统

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在现代应用程序中&#xff0c;安全性是至关重要的&#xff0c;特别是在处理用户身份验证时。Authlib库为Python开发者提供了一套强大的工具&#xff0c;用于简化和增强身份验证和授权流程。本文将深入探讨Authli…

STM32F407-14.3.15-01单脉冲模式

单脉冲模式 单脉冲模式 (OPM) 是上述模式的一个特例。在这种模式下&#xff0c;计数器可以在一个激励信号的触发下启动&#xff0c;并可在一段可编程的延时后产生一个脉宽可编程的脉冲。 可以通过从模式控制器启动计数器。可以在输出比较模式或 PWM 模式下生成波形。将 TIMx_C…

golang slice 数组针对某个字段进行排序

这里主要用到golang的sort.Sort方法&#xff0c;先看这个函数的简介&#xff1a; 介绍链接&#xff1a;https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter03/03.1.html 如何实现&#xff1a; import "sort"// UserInfo 用户信息结构…

2023年江西省“振兴杯”网络信息行业(信息安全测试员)职业技能竞赛 Write UP

文章目录 一、2023csy-web1二、2023csy-web2三、2023csy-web3四、2023csy-web4五、2023csy-misc1六、2023csy-misc2七、2023csy-crypto1八、2023csy-re1 一、2023csy-web1 该题提供一个web靶场&#xff0c;《伟大的挑战者》&#xff0c;分值&#xff1a;5分 web页面一直在播放c…

带大家做一个,易上手的家常辣子鸡

先从冰箱拿出鸡肉解冻 拿小半根葱 去掉最外面一层皮 切成小段 最备好 花椒 干辣椒 准备四五个大料 起锅烧油 这道菜需要放其他菜两到三倍的油 油温上来之后 放入干辣椒和花椒进行翻炒 等它们都烧黑之后捞出来 这样 辣味就留在油里面了 然后 倒入鸡肉 葱段 大料 然后 倒…

内网渗透基础

内网 内网指的是内部局域网&#xff0c;常说的LAN&#xff08;local area network&#xff09;。常见家庭wifi网络和小型的企业网络&#xff0c;通常内部计算机直接访问路由器设备&#xff0c;路由器设备接入移动电信的光纤实现上网。 内部局域网可以通过交换机/防火墙组成多个…

Remix IDE 快速开始Starknet

文章目录 一、Remix 项目二、基于Web的开发环境Remix 在线 IDE三、Starknet Remix 插件如何使用使用 Remix【重要】通过 Starknet by Example 学习一、Remix 项目 Remix 项目网站 在以太坊合约开发领域,Remix 项目享有很高的声誉,为各个级别的开发人员提供功能丰富的工具集…

《洛谷深入浅出进阶篇》p2568 GCD

P2568 GCD - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P2568 大致题意&#xff1a;给定正整数n&#xff0c;求1< x,y<n 且 gcd&#xff08;x&#xff0c;y&#xff09;为素数的数对&#xff08;x&#xff0c;y&#xff09;有多少对。…

深入体验:山海鲸可视化软件的独特魅力

山海鲸可视化软件是一款功能强大的数据可视化工具&#xff0c;作为该软件的资深用户&#xff0c;我深感其独特的魅力和优势。下面&#xff0c;我将从软件特点、操作体验、数据交互和实际应用场景等方面&#xff0c;为大家详细介绍山海鲸可视化软件。 首先&#xff0c;山海鲸可视…

TSINGSEE青犀智能商场远程视频监控方案,助力商场统一智能化监管

随着经济的发展和人们物质生活的提高&#xff0c;商场的普及度也越来越高&#xff0c;而商场一般都有占地面积大、人流量多、人员复杂的特点&#xff0c;商场的统一化管理也是一个大问题。智能商场远程视频监控通过利用物联网和云计算技术&#xff0c;可以用来实现远程统一化视…

数据分析基础之《matplotlib(6)—饼图》

一、饼图介绍 1、什么是饼图 饼图广泛的应用在各个领域&#xff0c;用于表示不同分类的占比情况&#xff0c;通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个区块&#xff0c;整个圆饼代表数据的总量&#xff0c;每个区块&#xff08;圆弧&#xff0…