dubbo服务过程

2024-09-07 22:28
文章标签 服务 过程 dubbo

本文主要是介绍dubbo服务过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

dubbo服务暴露过程
  • Dubbo通过实现ApplicationListener接口,监听了容器刷新的事件,再容器刷新后调用onApplicationEvent方法,这个是服务暴露的启动点
  • 通过识别带目标注解的服务类通过动态代理统一暴露出Invoker,如何通过配置文件以及目标协议(SPI机制)封装成exporter存储起来
  • 如果是本地注册,将exporter存入ServiceConfig的缓存,如果是远程暴露,先获取注册中心的配置,进行注册中心的注册URL,然后往一个ConcurrentHashMap存储接口的全限定名以及exporter,接着打开server通过socket监听服务
  • 如果有服务调用,根据注册中心的URL找到对应的exporter,再根据协议解析得到原始的实现类进行调用
dubbo引入过程
  • 服务启动点的流程有两种:一种是饿汉式,通过调用afterPropertiesSet方法引入服务。一种是懒汉式,只有当这个服务被注入到其他类中启动引入流程(也就是用到才开始注入)利用的是实现FactoryBean接口,当对任意服务Interface进行自动注入或者getBean获取时,就会触发。默认所使用的是饿汉式
  • 引入过程有三种情况:①本地引入走injvm协议,到服务暴露的缓存中去exporter②直连远程引入服务,直接写死Provider地址(一般测试时候用)③注册中心引入远程服务,Consumer通过注册中心得知Provider的相关信息,然后进行服务的引入
  • 一般是注册中心,他需要获取注册中心实例,向注册中心注册自身,并订阅Provider节点等相关信息,通过配置文件的信息来构造一个URL,通过URL上的协议以及利用自适应扩展机制调用得到对应的invoker,然后通过invoker构建代理,封装invoker返回服务引用,之后consumer调用这个代理类(这个代理类对应多个invoker后面进行负载均衡调用)
dubbo服务调用过程
  • 要是本地调用直接调用缓存的exporter就可以了
  • 要是调用远程的,需要调用某个接口的方法会调用之前生成的代理类,然后会从invoker集群中通过负载均衡选择一个invoker发起远程调用。这个时候会记录此请求的ID等待服务端的响应
  • 服务端接受请求之后会通过参数(接口的全限定名)找到之前暴露存储的map,得到对应的exporter然后找到invoker最终调用真正的实现类,然后再组装好结果返回,这个结果会带上之前请求的ID
  • 消费者根据响应的id找到正确记录的请求,然后找到请求之后将响应塞到对应的Future中,唤醒等待的线程,最终得到响应

这篇关于dubbo服务过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146336

相关文章

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知