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。不然后面引不进去。如果你设置maven面板中---右上角--自动---任何改变自动编译,那就不用再install了,IDEA会自动帮我们编译。

 

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

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

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

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

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

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

 

服务端配置:

 

posted @   Anne起飞记  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示