spring cloud consul服务注册源码分析

news2024/9/25 3:22:39

我们注册在consul上的服务,都是通过spring cloud consul discorvery来实现的,可以通过maven依赖导入spring-cloud-consul-discovery包。

对于spring项目,首先查看spring.factories文件:
在这里插入图片描述
从源码中可以找到服务注册、自动服务注册、配置、服务发现等功能所对应的类。对于服务自动注册,对应的就是ConsulAutoServiceRegistrationAutoConfiguration,通过@Bean自动注入了ConsulAutoServiceRegistration类
在这里插入图片描述
ConsulAutoServiceRegistration又继承了AbstractAutoServiceRegistration抽象类
在这里插入图片描述
在AbstractAutoServiceRegistration中,实现了ApplicationContextAware和ApplicationListener接口。下面分别对这两个接口进行分析。
在这里插入图片描述
1.ApplicationContextAware

这个接口里面只有一个方法setApplicationContext,如果实现了这个方法,Spring在启动的时候就需要实例化这个class,在实例化这个class的时候,发现它包含这个ApplicationContextAware接口的话,Spring就会调用这个对象的setApplicationContext方法,把applicationContext给塞进去。
在这里插入图片描述
而在AbstractAutoServiceRegistration中,重写的方法为:
在这里插入图片描述
知道了如何调用,那么又是如何触发的呢?

2.ApplicationListener

AbstractAutoServiceRegistration还实现了ApplicationListener接口,ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理;如果容器中存在ApplicationListener的Bean,当ApplicationContext调用publishEvent方法发送事件时,对应Bean的onApplicationEvent会被触发。
在这里插入图片描述
而在AbstractAutoServiceRegistration中,重写的方法为:
在这里插入图片描述
start()方法:
在这里插入图片描述
当收到web server初始化成功的事件之后,会触发bind方法,更新服务监听端口、发布预注册事件、开始注册、发布注册成功事件、更新服务运行标志。

触发之后,就会调用注册过程:
在这里插入图片描述
super.register(),register()的方法在ConsulServiceRegistry类中:
在这里插入图片描述
Consul api包中,调用了consul开源的注册API
在这里插入图片描述
至此,注册逻辑结束。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubespray v2.21.0 部署 kubernetes v1.24.0 集群

文章目录1. 前言2. 创建7台虚拟机3. 部署 git3.1 dnf 安装3.2 tar 安装4. 下载 kubespray 介质5. 配置 zsh 终端6. 配置互信7. 安装 docker-ce8. 安装 ansible9. 安装其他依赖10. 配置内核参数11. 安装 k8s利用官方默认镜像部署 k8s 集群利用自定义构建镜像部署 k8s 集群12. 配…

第二讲 第一个Python程序

在上一课中,我们对 Python 语言的过去现在有了一些了解,我们准备好了运行 Python 程序所需要的解释器环境。相信大家已经迫不及待的想开始自己的 Python 编程之旅了,但是新问题来了,我们应该在什么地方书写 Python 程序&#xff0…

mvn测试执行用例的常用的命令

mvn执行指定的测试用例 mvn常用的命令 mvn mvn test -Dtestxxx:执行指定测试用例的命令,后面的xxx就是指定的所有被标记的用例 mvn test -Denv环境名 -Dtest包的路径.*:指定具体的某个环境的某个包下的所用例 mvn test -Dgroupsxxx -Dtestxxx :指定某…

Python实战案例:采集P站数据内容

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境: Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 模块使用: requests : 主要用来发 送 HTTP 请求 、 属于第三方模块 parsel : 解析html,xml内…

业务高峰期,人力需求突增,灵活用工成破局关键

在上一篇文章里,讲到了盖雅零工平台如何帮助HR管理复杂、灵活的零工人员。 而零工平台是否好用,不仅要便于HR管理零工,更需要终端的业务管理者觉得方便、实用、操作顺畅。 由于零工主要被用来解决突增的、巅峰期的、季节性的用工需求&#…

nginx实战,nginx高可用, nginx负载配置, nginx正向,反向代理,nginx各种配置, 及其配置问题

nginx配置实战, nginx负载, nginx正向,反向代理,nginx路由配置 nginxnginx基础nginx 配置nginx正向代理nginx 反向代理nginx 负载nginx高可用 nginx 配置常见问题反向代理报426错误post请求变get请求nginx 配置前端代理, 会出现js…

自学Java靠谱吗?自学Java能找到工作吗?建议收藏反复查看!

网上是不是很多人劝你学Java不要报班,浪费金钱,自己在家学习Java就可以了。那小源问你,自学Java它的成功率到底有多少?前两天看到一位老师发的视频,说自学的成功率大概在5%左右,小源觉得这个数据还是比较客…

IO线程模型

文章目录IO线程模型一、BIO1、概念2、Demo2.1、Demo1.02.2、Demo2.02.3、小结二、NIO1、概念2、Demo2.1、Demo1.02.2、Demo2.0IO线程模型 一、BIO 1、概念 BIO 全称 Block-IO 是一种**同步且阻塞**的通信模式。是一个比较传统的通信方式,模式简单,使用…

万字长文的BI百科全解

目前来看,现今世界未来的发展方向基本已经确定,数字化的趋势已经化身为一股不可阻挡的浪潮,各国也都宣布了数字化、数据、数字经济、数字化转型等方面的相关发展政策法规,明确未来的战略方针。同时世界传统经济增长也开始乏力&…

6 计时器(一)

计时器 6.1 TIM TIM简介 TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中…

2023 年 3 月 NFT 月度报告

作者:Danielfootprint.network 数据来源:NFT Monthly Report 三月份的 NFT 市场上出现了两个有趣的趋势。一方面,Polygon 链尽管在二月份有所突破,达到了 NFT 总交易量的 4.2%,但于三月再次跌至 1% 以下,…

55 openEuler搭建Mariadb数据库服务器-配置环境

文章目录 55 openEuler搭建Mariadb数据库服务器-配置环境55.1 关闭防火墙并取消开机自启动55.2 修改SELINUX为disabled55.3 创建组和用户55.4 创建数据盘55.4.1 方法一:在root权限下使用fdisk进行磁盘管理55.4.2 方法二:在root权限下使用LVM进行磁盘管理…

【C语言】基础语法1:变量和数据类型

❤️‍🔥前情提要❤️‍🔥   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图(结束换链接)并免费提供给大家学习,希望大家纠错指正。本专栏将以基础出发,在之后的教程中将会不断…

MySQL调优笔记——慢SQL优化记录(2)

今天调优的原因是,有一个统计报表业务,查询的时间太慢;同时由于数据库的压力是随机性的,这个业务的执行下限和上限相差近20倍;快的时候可以达到600ms,慢的时候有9秒之多; 接下来详细介绍&#x…

STL--string

一、string介绍 string是表示字符序列的对象。 标准字符串类通过类似于标准字节容器的接口为此类对象提供支持,但添加了专门设计用于处理单字节字符字符串的功能。 字符串类是 basic_string 类模板的实例化,该模板使用char作为其字符类型,以…

【云原生进阶之容器】第五章容器运行时5.7--容器逃逸原理

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

为什么要对员工行为进行安全管控?

ChatGPT的火热已不是一件新鲜事了。而现在更让大家热议的是,ChatGPT带来的网络安全风险,不少安全人员对此担心不已。因ChatGPT引起的网络安全事件,媒体也多有报道。 例如,近日,外媒就报道了三星因ChatGPT泄露了机密信息…

ChatGPT - 基于 Visual Studio Code 进行 AI 编码

2023-04-15 周六 杭州 晴 前情提要 ChatGPT ,AutoGPT , AgentGPT 现在各种人工智能编码工具层出不穷,通过人工智能编码再也不用记大量的技术知识点了,现在所谓开发人员的经验性的东西也好像弱化了很多,我们可以更有效率的做自己…

Qt/QML编程学习之心得:QML界面设计(二)

都知道Qt是一种界面设计语言,那么它有几种设计方式UI technologies呢?答案是5种。 1、传统桌面所见即所得Classic desktop look-and-feel• Qt Widgets 2、 流畅、现代+触控Fluent, modern touch-based UX• Qt Quick 3、 三维3D becomes more and more important• Qt Open…

安全运营之资产安全信息管理

安全风险管理的三要素分别是资产、威胁和脆弱性,脆弱性的存在将会导致风险,而威胁主体利用脆弱性产生风险。网络攻击主要利用了系统的脆弱性。由于网络管理对象(资产)自身的脆弱性,使得威胁的发生成为可能,…