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

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

Linux部署jar包过程

《Linux部署jar包过程》文章介绍了在Linux系统上部署Java(jar)包时需要注意的几个关键点,包括统一JDK版本、添加打包插件、修改数据库密码以及正确执行jar包的方法... 目录linux部署jar包1.统一jdk版本2.打包插件依赖3.修改密码4.执行jar包总结Linux部署jar包部署

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构