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

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ