首页 > 编程语言 >Dubbo源码学习

Dubbo源码学习

时间:2024-07-09 17:45:26浏览次数:9  
标签:Dubbo 调用 服务 -- 代理 学习 源码 注解

学习Dubbo框架与手写模拟相关内容

一、存在的意义

Dubbo:解决分布式系统的复杂性,实现服务治理(使服务之间的调用变的简单)和自动注册与发现,简化服务调用。

二、调用过程

Dubbo的使用

接口代表一种服务,对应不同的实现,使服务之间的依赖变的简单。

服务消费者通过ClassPassXmlApplicationContext下的getBean(“实现类实例”,实现类.class)拿到 接口的代理对象,然后拿接口代理对象调用里面的方法。

 

远程调用:想使用接口,通过写一个类里面实现jdk自带的 getProxy方法 返回代理对象。

其中重写了参数列表的invoke方法,在这里加入代理逻辑==将其封装到这里,返回对应的代理对象。

代理逻辑:new HttpClient--new Invocation()--通过httpclient.send发送到某ip某端口invocation,返回result。

 

01-Dubbo框架介绍与手写模拟Dubbo

负载均衡:Random.nextInt(边界值)

容错机制:try--catch(自己写想返回什么)

mock:使用Mock数据来模拟后端响应,从而提前开始前端界面的开发和调试。

 

 -----------------------------------------------------------------------------------------------------------------------------------------------------

enabledubbo开启dubbo服务,扫描yml配置。dubboservice注册暴露服务,refrence通过注册中心远程调用注入

分布式项目:可以独立的启动,packaging方式是war。加上Tomcat插件。

 dubbo提供的service注解,将服务注册到注册中心。

Autowird本地注入==从spring容器找,有无这个bean。将项目链式依赖删除后,就找不到了,需要通过Dubbo提供的Refrence注解,通过代理对象 拿到bean使用。

1.从zookeeper拿到服务的url

2.rpc远程调用

3.返回代理对象

将service接口,作为公共模块提取。 是服务提供者和消费者的桥梁。

 

启动jar包: java -jar ./jar包名字

被依赖的工程,有改动了要重新install。

 

序列化:两个机器上传递数据,需要序列化数据进行传递。

地址缓存:zk挂了,仍可访问。

超时:A-->B的服务,如果B挂了,则在A堆积大量请求,造成A雪崩瘫痪。通过设置timeout属性(默认1000,单位毫秒)。两端都可设置,推荐服务端。

重试:超时后,自动断开连接。避免因发生网络抖动超时直拒,设置retries重试次数(默认2),重试仍无法访问,才返回失败。

多版本:实现新功能发布初,部分用户使用(service注解的version属性)(在消费端Refrence注解设置version属性),后续灵活更改对应版本。

负载均衡:enter+shift搜索AbstractLoadBalance。(service注解的weight属性)(在消费端Refrence注解设置loadbalance属性,默认random)

 

服务端配置:

 

标签:Dubbo,调用,服务,--,代理,学习,源码,注解
From: https://www.cnblogs.com/fengok/p/18289997

相关文章

  • linux学习之登录密码(ssh/telnet)
    在Linux系统中,用户登录密码是用于安全验证用户身份的一种方式。登录密码通常是加密后存储在系统的/etc/shadow文件中。如果您想要获取Linux系统中用户的登录密码,这通常是不可能的,因为密码是经过加密处理的,而且出于安全考虑,没有直接的方式可以获取它们的明文形式。/etc/passwd......
  • redis学习(007 实战:黑马点评:登录)
    黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目总时长42:48:00共175P此文章包含第25p-第p34的内容文章目录短信登录功能session共享问题短信登录功能接口编写这里是Result的封装过滤器在......
  • PLC CODESYS 学习:入门第一步(辅助资料)
    CodeSys平台的基本功能和编程技能掌握:>>PDF书籍:《CODESYS-V4-基础编程指南完整版.pdf》《开放式控制系统编程技术基于IEC 61131-3国际标准.pdf》>>中文在线帮助手册:《CODESYSDevelopmentSystem》链接:CODESYSOnlineHelp>>错误查找:在帮助手册上查找SMC_ERROR(ENUM)可......
  • 【TWVRP】蚁群算法求解带时间窗的车辆路径规划(目标函数:最短距离)【含Matlab源码 4969期
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。......
  • 【路径规划】模糊控制无人艇路径规划【含Matlab源码 4967期】
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。......
  • 【模型预测控制】单向拓扑结构下异构车辆排分布式模型预测控制【含Matlab源码 4968期
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。......
  • C语言学习笔记(02)——关键字概念
    sizeof编译器给我们查看内存空间容量的一个工具不存在函数实现,在任何情况下都可以使用inta:printf("theais%d\n",sizeof(a));printf("theais%lu\n",sizeof(a)); //最好使用%lu打印,因为sizeof默认返回的是unsignedlong类型的>>>4char:硬件处理的最小单位;8bit=1B,8bi......
  • MySQL 源码|LEX 结构体
    LEX结构体源码位置:(版本=MySQL8.0.37)sql/sql_lex.hsql/sql_lex.ccsql/sql_class.ccrouter/src/routing/src/sql_lexer.ccLEX对象当前有以下功能:包含了一些SQL命令的通用属性,例如:sql_command,数据变更语句语法中是否存在IGNORE,以及表列表query_tables包含了一些......
  • Vue源码学习(二十):$emit、$on实现原理
    好家伙, 0、一个例子<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><title>Vue父子组件通信示例</title><scriptsrc="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"......
  • PointNet——源码调试(模型训练+可视化测试显示)
    因为项目涉及到3D点云项目,故学习下PointNet这个用来处理点云的神经网络论文的话,大致都看了下,网络结构有了一定的了解,本博文主要为了下载调试PointNet网络源码,训练和测试调通而已,不涉及后续的改进优化。我是在Anaconda下创建一个新的虚拟环境空间部署项目测试大概用到的就......