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

相关文章

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题