淄博烧烤网红店(带你了解“dubbo”)

一、dubbo是什么?

Dubbo是一个分布式服务,高性能,基于Java的开源RPC框架,力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册,

其核心部分包含:

1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

2. 集【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

二、Duboo基本概念解释

概观:ubbo是阿里巴巴的高性能,基于Java的开源RPC框架。 与许多RPC系统一样,它基于定义服务的想法,指定可以通过参数和返回类型远程调用的方法。 服务器实现此接口并运行一个dubbo服务器来处理客户端调用。 在客户端,客户端有一个存根,提供与服务器相同的方法。

Dubbo能做什么?

Dubbo提供三个关键功能,其中包括基于远程【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目呼叫的接口,容错和负载平衡以及自动服务注册和发现。 达博框架广泛应用于阿里巴巴以及其他公司,包括京东,当当,qunar,kaola等。

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

Dubbo采用全spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Sche【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目ma扩展进行加载。

之前使用Web Service,我想测试接口可以通过模拟消息的方式通过soapui或LR进行功能测试或性能测试。但现在使用Dubbo,接口之间不能直接交互,我尝试通过模拟消费者地址测试,结果不堪入目,再而使用jmeter通过junit进行测试,但还是需要往dubbo上去注册,如果再不给提供源代码的前提下,这个测试用例不好写啊….

3. dubbo的架构

dubbo架构图如下所示:

节点角色说明:

Provider: 暴露服务的服务提供方。

Consumer: 调用远程服务的服务消费方。

Registry: 服务注册与发现的注册中心。

Monitor: 统计服务的调用次调和调用时间的监控【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目中心。

Container: 服务运行容器。

我们解释以下这个架构图:

Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当然同步的意思了,多说一句,在实际调用过程中,Provider的位置对于Consumer来说是透明的,上一次调用服务的位置(IP地址)和下一次调用服务的位置,是不确定的。这个地方就是实现了软负载。

服务提供者先启动start,然后注册register服务。

消费订阅subscribe服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目务通过notify到消费者。

Monitor这是一个监控,图中虚线表明Consumer 和Provider通过异步的方式发送消息至Monitor,Consumer和Provider会将信息存放在本地磁盘,平均1min会发送一次信息。Monitor在整个架构中是可选的(图中的虚线并不是可选的意思),Monitor功能需要单独配置,不配置或者配置以后,Monitor挂掉并不会影响服务的调用。

三、Dubbo使用介绍

快速启动

本指南让您从一个简单的工作示例开始,使用Java中的dubbo。 您可以在github上的dubbo项目中找到完整的工作dubbo-demo。

先决条件

JDK:版本6或更高版本

Mave【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目n:版本3或更高版本

Maven依赖

您可能需要使用最新版本来构建您的dubbo应用程序。

实施服务提供商

配置服务提供商

下面的代码片段显示了如何配置API,如果它是首选。

启动服务提供商

配置服务使用者

下面的代码再一次展示了弹簧集成

运行服务使用者

四、dubbo原理

I、初始化过程细节:

上图中的第一步start,就是将服务装载容器中,然后准备注册服务。和Spring中启动过程类似,spring启动时,将bean装载进容器中的时候,首先要解析bean。所以dubbo也是先读配置文件解析服务。

解析服务:

1)、基于dubbo.jar内的Meta-inf/spring.handlers配置,spring在遇到dub【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目bo名称空间时,会回调DubboNamespaceHandler类。

2)、所有的dubbo标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。

在ServiceConfig.export 或者ReferenceConfig.get 初始化时,将Bean对象转会为url格式,将所以Bean属性转成url的参数。

然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露和引用。

暴露服务:

a、 只暴露服务端口

在没有使用注册中心的情况,这种情况一般适用在开发环境下,服务的调【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目用这和提供在同一个IP上,只需要打开服务的端口即可。

即,当配置 or

ServiceConfig解析出的URL的格式为:

Dubbo://service-host/com.xxx.TxxService?version=1.0.0

基于扩展点的Adaptiver机制,通过URL的“dubbo://”协议头识别,直接调用DubboProtocol的export()方法,打开服务端口。

b、向注册中心暴露服务:

和上一种的区别:需要将服务的IP和端口一同暴露给注册中心。

ServiceConfig解析出的url格式为:

registry://registry-host/com.alibaba.dubbo.regi【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目stry.RegistryService?export=URL.encode(“dubbo://service-host/com.xxx.TxxService?version=1.0.0”)

基于扩展点的Adaptive机制,通过URL的“registry://”协议头识别,调用RegistryProtocol的export方法,将export参数中的提供者URL先注册到注册中心,再重新传给Protocol扩展点进行暴露:

Dubbo://service-host/com.xxx.TxxService?version=1.0.0

五、 引用服务:

a、直接引用服务:

在没有注册中心的,直连提供者情况下,

R【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目eferenceConfig解析出的URL格式为:

Dubbo://service-host/com.xxx.TxxService?version=1.0.0

基于扩展点的Adaptive机制,通过url的“dubbo://”协议头识别,直接调用DubboProtocol的refer方法,返回提供者引用。

b、从注册中心发现引用服务:

此时,ReferenceConfig解析出的URL的格式为:

·registry://registry-host/com.alibaba.dubbo.registry.RegistryService?refer=URL.encode(“consumer://consume【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目r-host/com.foo.FooService?version=1.0.0”)

基于扩展点的Apaptive机制,通过URL的“registry://”协议头识别,就会调用RegistryProtocol的refer方法,基于refer参数总的条件,查询提供者URL,如:

Dubbo://service-host/com.xxx.TxxService?version=1.0.0

基于扩展点的Adaptive机制,通过提供者URL的“dubbo://”协议头识别,就会调用DubboProtocol的refer()方法,得到提供者引用。

然后RegistryProtocol将多个提供者引用,通过Clu【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目ster扩展点,伪装成单个提供这引用返回。

六、远程调用细节:

服务提供者暴露一个服务的详细过程:

上图是服务提供者暴露服务的主过程:

首先ServiceConfig类拿到对外提供服务的实际类ref,然后将ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到invoker的转化。接下来就是Invoker转换到Exporter的过程。

Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程,下面我们以Dubbo和rmi这两种典型协议的实现来进行说明:

Dubbo的实现:

Dubbo协议的Invoker转【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由dubbo自己实现。

Rmi的实现:

RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,他通过Spring或Dubbo或JDK来实现服务,通讯细节由JDK底层来实现。

服务消费者消费一个服务的详细过程

上图是服务消费的主过程:

首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例。接下来把Invoker转为客户端需要的接口

如果发现文章有任何问题,欢迎私信或者留言【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目交流,也可以关注笔者的头条号,一起学习交流一起进步。

推荐阅读

给力项目线报网会员可免费下载 加入会员
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:226333560 站长微信:qgzmt2
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

json字符串转换成文本格式(如何将json字符串转换成json数组并遍历属性值)

2024-4-21 23:52:27

行业资讯

手游福利盒子破解版(福利,有哪些值得每天一看的网站?)

2024-4-22 6:13:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索