学习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)
服务端配置: