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-providercloud: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@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

controller

@RestController
public class NacosDiscoveryConsumerController {@Autowiredprivate 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: nullat 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.hqwc.cn/news/247314.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络类型解析(基础):探索通信世界的多样面貌

在当今数字化时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。从个人设备之间的直接通信到全球范围的数据传输&#xff0c;不同类型的网络为我们提供了多种连接方式和通信选择。透过对这些网络类型的解析&#xff0c;我们将更好地理解它们的特点、优势和适用场…

二值图像分割统一项目

1. 项目文件介绍 本章为二值图像的分割任务做统一实现&#xff0c;下面是项目的实现目录 项目和文章绑定了&#xff0c;之前没用过&#xff0c;不知道行不行 data 文件夹下负责摆放数据的训练集测试集inference 负责放待推理的图片(支持多张图片预测分割)run_results 是网络训…

gitlab-jenkins-shell-helm-chart-k8s自动化部署微服务

1.准备好编译环境的容器&#xff0c;所有容器的镜像制作在gemdale-dockerfile这个代码库里面&#xff0c;也可以直接拉取官方镜像部署 docker run --name node1420-patternx -v /data/var/www/:/data/var/www/ -v /var/jenkins_home/:/var/jenkins_home/ -v /mnt/hgfs/:/mnt/h…

postgresql pg_hba.conf 配置详解

配置文件之pg_hba.conf介绍 该文件用于控制访问安全性&#xff0c;管理客户端对于PostgreSQL服务器的访问权限&#xff0c;内容包括&#xff1a;允许哪些用户连接到哪个数据库&#xff0c;允许哪些IP或者哪个网段的IP连接到本服务器&#xff0c;以及指定连接时使用的身份验证模…

MySQL数据备份

一、逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句&#xff0c;适用于中小型数据库&#xff0c;效率相对较低。 本质&#xff1a;导出的是SQL语句文件 优点&#xff1a;不论是什么存储引擎&#xff0c;都可以用mysqldump备成SQL语句 缺点&#xff1a;速度较慢&…

由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想

文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班&#xff0c;打车较…

天池XGBoost,重写柱状图代码,标签编码

天池XGBoost 地址 重写柱状图代码&#xff1a;我没考虑复杂度&#xff0c;只考虑直观理解 原文统计地点是否降雨来画柱状图实在是太麻烦了&#xff0c;我重写了一下。最麻烦的就是数据处理。我的思路是&#xff1a; 首先取下雨的全部数据data[data[RainTomorrow] Yes] 然后…

SpringBoot——嵌入式 Servlet容器

一、如何定制和修改Servlet容器的相关配置 前言&#xff1a; SpringBoot在Web环境下&#xff0c;默认使用的是Tomact作为嵌入式的Servlet容器&#xff1b; 【1】修改和server相关的配置&#xff08;ServerProperties实现了EmbeddedServletContainerCustomizer&#xff09;例如…

Http和WebSocket

客户端发送一次http请求&#xff0c;服务器返回一次http响应。 问题&#xff1a;如何在客户端没有发送请求的情况下&#xff0c;返回服务端的响应&#xff0c;网页可以得服务器数据&#xff1f; 1&#xff1a;http定时轮询 客户端定时发送http请求&#xff0c;eg&#…

IntelliJ IDEA图形安装教程

IntelliJ IDEA图形安装教程 之前开始Java程序&#xff0c;一直用的eclipse&#xff0c;觉得还可以。一直听说IntelliJ IDEA比eclipse好用很多&#xff0c;但因为比较懒&#xff0c;也没有学习使用。机缘巧合下&#xff0c;尝试用了下&#xff0c;顿时有种相见恨晚的感觉&#…

17:00面试,17:06就出来了,问的问题有点变态。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

编码器-解码器(seq-seq)

1. 背景 encoder-decoder和seq-seq模型可以解决输入与输出都是不定长序列的问题。它们都用到了两个循环NN&#xff0c;分别叫做编码器(用来分析输入序列)与解码器(用来生成输出序列)。 2. 编码器 把一个不定长的输入序列变换成一个定长的背景变量c&#xff0c;并在其中编码输入…