dubbo(dubbo基于什么协议)

本篇文章给大家谈谈dubbo,以及dubbo基于什么协议对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

说一下Dubbo的工作原理?注册中心挂了可以继续通信吗?

答案是肯定可以的,我将从下面几点进行说明卖搜:

1.dubbo 的调用流程

2.Dubbo整体设计

3.从源码上说明注册中心挂了还是可以继续通信的

Dubbo 调用流程

架构图

流程说明:

1.Provider(提供者)绑定指定端口并启动服务

2.提供者连接注册中心,并发本机IP、端口、应用信息和提供服务信息发送至注册中心存储

3.Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信息至注册中心

4.注册中心根据 消费 者所求服务信息匹配对应的提供者列表发送至Consumer 应用缓存。

5.Consumer 在发起远程调用时基于缓存的消费者列表择其一发起调用。

6.Provider 状态变更会实时通知注册中心、在由注册中心实时推送至Consumer

这么设计的意义:

Dubbo 整体设计

其协作流程如下:

从源码上说明注册中心挂了还是可以继续通信的

首先要把消费者注册到Zookeeper注册中心

然后使用RegistryDirectory 监听一下几个目录(会自动触发一次去获取这些目录上的当前数据)

当前所引入的服务的动态配置目录:/dubbo/config/dubbo/org.apache.dubbo.demo.DemoService:1.1.1:g1.configurators

比如监控providers 目录:

当有服务提供者注册,zookeeper会自动推动给订阅的消费者,然后转换为invoker存储到缓存中

我们在看调用时的代码:

我们看到 FailoverClusterInvoker 的doInvoke方法

Invoker invoker = select(loadbalance, invocation, copyInvokers, invoked);

此方法根据负载均衡器去缓存中获取一个invoker,

上面的 copyInvokers 就是上面我们缓存进去的 List

invokers = routerChain.route(getConsumerUrl(), invocation);

总结

在我们系统启动时,已经缓存了注册中心上的所有服务,后续的注册中心挂了只会影响到后续则注册,不会影响调用!

Dubbo分布式的RPC,微服务框架,

包括三个关键功能:基于接口的远程调用,容错与负载均衡,服务自动注册与发现。

Dubbo使得调用远程服务就像调用本地java服务一样简单。

参考Dubbo官方文档:包括实现细节,远程调用细节,服务提供者暴露服务。

主要流程。

1、provider向注册中心去注册

2、consumer从注册中心订阅服务,注册中心会通知consumer注册好的服务

3、consumer调用provider

4、consumer和provider都异步的通知监控中心

基于zk作为注册启斗中心:

【提供者】在【启动】时,向注册中心zk 【注册】自己提供的服务。

【消费者】在【启动】时,向注册中心zk 【订阅】自己所需的服务。

所以是可以的,消费者在启动时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用,消费者本地有一个生产者的列表,他会按照列表继续工作,倒是无法从注册中心去同步最新的服中旁历务列表,短期的注册中心挂掉是不要紧的,但一定要尽快修复,挂掉是不要紧的,但前提是你没有增加新的服务,如果你要调用新的服务,则是不能办到的

[img]

Dubbo的底层实现原理和机制

Dubbo :是一个rpc框架,soa框架

作为RPC:支持各种传输协议,如dubbo,hession,json,fastjson,底层采用mina,netty长连接进行传输!典型的provider和cusomer模式!

作为SOA:具有服务治理功能,提供服务的注册和发现!用zookeeper实现注册中心!启动时候服务端会把所有接口注册到注册中心,并森芦且订阅configurators,服务消费端订阅provide,configurators,routers,订阅逗大变更时,zk会推送providers,configuators,routers,启动时注册长连接,进行通讯!proveider和provider启动后,后台启动定时器,发送统计数据到monitor!提供各种容错机制和负载均衡策略!!

描述一个服务从发布到被消费的详细过程:

一个服务的发布暴露过程:

首先设置一个项目的别名,然后是定义注册中心和设定传输协议,之后定义服务名!服务接口以jar形式导入到provider!

一个服务发布暴露首先由spring的spacehander 把相关的xml或者注解全部转化为springBean,之后通过ServiceConfig.exerp()方法把bean传化为传输所需的url和参数注册到注册中心,发布后provder端的ref(helloImpl)通过protocl(传输协议,如dubboprotocl,hessionprotocl)转化为Invoker对象,即调用信息,包括类,方法,参数等等,再通过proxy操作(代理)如jdkproxy代理转为为Exporter对象,这就是整个的服务暴露过程!

消费过程:

一个Renfence类,通过RenfenceConfig的init 调用proxy的refer方法生产一个invoker,invoker再通过proctol转化成具体的ref(hello),进行消费

首先 ReferenceConfig 类的 init 方法调用 Protocol 的 refer 方法生成 Invoker 实例(如上图中的红色部分),这是服务山春竖消费的关键。接下来把 Invoker 转换为客户端需要的接口(如:HelloWorld)

具体参见

Exporter接口提供Invoker的调用和destroy()

public interface ExporterT {

}

#Dubbo的实现

Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由Dubbo自己实现。

Dubbo 简介和实现原理

I、初始化过程细节:

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

解析服务:

1)、基于dubbo.jar内的Meta-inf/spring.handlers配置,spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler类。

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

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

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

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

服务消费的主过程:

首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例(如上图中的红色部分),这是服务消费的关键。

接下来把Invoker转换为客户端需要的接口(如:HelloWorld)。

什么是dubbo

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调锋闭扒用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)。

Dubbo的核心部分包括:

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

2、集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

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

Dubbo的作用

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

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

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

dubbo和zookeeper

dubbo 是一个远程调用服务的分布式框架,可以实现远程通讯、动态配置、地址路由等等功能。比如在入门demo里的暴露服务,使得远程调用的协议可以使用dobbo协议( dubbo://x.x.x.x )或者其它协议,可以配置zookeeper集群地址,实现软负载均衡并配置均衡方式等。在不搭配注册中心的时候,它也是可以实现服务端和调用端的通信的,这种方式是点对点通信的,所谓“没有中间商”。但是如果配置服务发布和调用端过多特别是集群的方式提供服务的时候,就会暴露许多的问题:增加节点需要修改配置文件、服务端机器宕机后不能被感知等。它可以通过集成注册中心,来动态地治理服务发布和服务调用。相当于把服务注册和发布推送的功能分摊给了(zookeeper)注册中心。

Dubbo实现服务调用是通过RPC的方式,即客户端和服务端共用一个接口(将接口打成一个jar包,在客户端和服务端引入这个jar包),客户端面向接口写调用,服务端面向接口写实现,中间的网络通信交给框架去实现。

咱们来看下Spring 配置声明暴露服务,provider.xml文件

再来看服务消费者,consumer.xml文件

这就是典型的点对点的服务调用。当然我们为了高可用,可以在consumer.xml中配置多个服务提供者,并配置响应的负载均衡策略。

配置多个服务调用者在comsumer.xml的dubbo:reference标签的url属性中加入多个地址,中间用分号隔开即可;配置负载均衡策略在comsumer.xml的dubbo:reference标签中增加loadbalance属性即可,值可以为如下四种类型:

那么目前的架构有什么问题呢?

1.当服务提供者增加节点时,需要修改配置文件。

2.当其中一个服务提供者宕机时,服务消费者不能及时感知到,还会往宕机的服务发送请求。

这个时候就需要引入注册中心了,Dubbo目前支持4种注册中心(multicast、zookeeper、redis、simple)推荐使用Zookeeper注册中心,要使用注册中心,只需要将provider.xml和consumer.xml更改为如下:

如果zookeeper是一个集群,则多个地址之间用逗号分隔即可

把consumer.xml中配置的直连的方式去掉

注册信息在zookeeper中如何保存?

启动上面服务后,我们观察zookeeper的根节点多了一个dubbo节点及其他,图示如下

最后一个节点中服务的地址,为什么把最后一个节点标成绿色?因为最后一个节点是肢竖临时节点,而其他节点是持久节点,这样,当服务宕机时,这个节点就会自动消失,不再提供服务,服务消费者也不会再请求。如果部署多个DemoService,则providers下面会有好几个节点,一个节点保存一个DemoService的服务地址。

其实一个zookeeper集群能被多个应用公用,因为不同的框架会在zookeeper上建不同的节点,互不影响。如dubbo会创建一个/dubbo节点,storm会创建一个/storm节点。

zookeeper 介绍:

zookeeper是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用尘饥历。

流程说明:

支持以下功能:

补充:

dubbo的协议使用什么序列化框架?

dubbo有多种协议,不同的协议默认使用不同的序列化框架。比如dubbo协议默认使用 Hessian2 序列化(说明:Hessian2 是阿里在 Hessian 基础上进派搜行的二次开发,起名为Hessian2)。rmi协议默认为 java 原生序列化,http协议默认为为 json。

dubbo的通信方式?

采用单一长连接和NIO异步通信,基于Hessian2作为序列化协议。适合于小数据量(每次请求在100kb以内)大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。具体实现是消费者使用 NettyClient,提供者使用 NettyServer,Provider 启动的时候,会开启端口监听,使用我们平时启动 Netty 一样的方式。而 Client 在 Spring getBean 的时候,会创建 Client,调用远程方法的时候,将数据通过DubboCodec编码发送到 NettyServer,然后 NettServer 收到数据后解码,并调用本地方法,并返回数据,完成一次完美的 RPC 调用。

zookeeper选举机制?

zookeeper选举算法默认的是FastLeaderElection,选举机制的概念:

1.服务器ID:比如有三台服务器,编号分别是1、2、3,编号越大在选择算法中的权重越大。

2.事务ID:服务器中存放的最大数据ID(致使ZooKeeper节点状态改变的每一个操作都将更新事务id,即时间戳),值越大说明数据越新,在选举算法中数据越新权重越大。

3.逻辑时钟,或者叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,然后与接收到的其它服务器返回的投票信息中的数值相比,根据不同的值做出不同的判断。

选举状态:LOOKING:竞选状态;FOLLOWING:随从状态,同步leader状态,参与投票;OBSERVING:观察状态,同步leader状态,不参与投票;LEADING:领导者状态。

初次选举简述:

目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:

1.服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking。

2.服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。

3.服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数为3正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。

4.服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。

5.服务器5启动,后面的逻辑同服务器4成为小弟。

如果中间有节点挂掉,只要有半数以上节点存活,就可以正常服务,如果leader挂掉,则所有节点处于Looking状态 ,各自依次发起投票,投票包含自己的服务器ID和最新事务ID,如果发现别人的事务id比自己大,也就是数据比自己新,那么就重新发起投票,投票给目前已知最大的事务id所属节点(事务id一样,则数据id大的胜出)。每次投票后,服务器都会统计投票数量,判断是否有某个节点得到半数以上的投票。如果存在这样的节点,该节点将会成为准Leader,状态变为Leading。其他节点的状态变为Following。

引用:

Dubbo简介

Dubbo是Alibaba开源的分布式服务框架,它按照分层的方式来架构,使用这种方式可以使各层解耦。

Dubbo在调用远程的服务的时候再本地有一个接口,就想调用本地方法一样去调用,底层实现好参数传输和远程服务运行结果传回之后的返回。

Dubbo的特点:

(1)它主要使用高效的网络框架和序列化框架,让分布式服务之间调用效率更高。

(2)采用注册中心管理众多的服务接口地址,当你想调用服务的时候只需要跟注册中心询问谈歼瞎即可,不像使用WebService一样每个服务都得记录好接口调用方式。

(3)监控中心时实现服务方和调用方之间运行状态的监控,还能控制服务的优先级、权限、权重、上下线等,让整个庞大的分布式服务系统的维护和治理比较方便。

(4)高可用,如果有服务挂了,注册中心就会从服务列表去掉该节点,客户端会像注册中心请求另一台可用的服务节点重新调用。同时注册中心也能实现高可用(ZooKeeper)。

(5)负载均衡,采用软负载均衡算法实现对多个相同服务的节点的请求负载均衡。

Dubbo需要四大基本组件:Rigistry,Monitor,Provider,Consumer。

1、含空监控中心的配置文件-dubbo.properties文件

(1)容器改改,监控中心是在jetty和spring环境下运行,依赖于注册中心,日志系统是log4j

    dubbo.container = log4j,spring,registry,jetty

(2)监控服务的名称,监控系统对整个Dubbo服务系统来说也是一个服务

    dubbo.application.name = simple-monitor

(3)服务的所有者,这是Dubbbo的服务的功能,可以指定服务的负责人

    dubbo.application.owner = coselding

(4)注册中心的地址,配置后监控中心就能通过注册中心获取当前可用的服务列表及其状态,在页面向你汇报Dubbo中的服务运行情况。

    dubbo.registr.address = multicast://{ip}:{port} //广播

    dubbo.registr.address = zookeeper://{ip}:{port} //zookeper

    dubbo.registr.address = redis://{ip}:{port} //redis

    dubbo.registr.address = dubbo://{ip}:{port} //dubbo

(5)dubbo协议端口号

    dubbo.protocol.port = 7070

(6)jetty工作端口号

    dubbo.jetty.port = 8082

(7)工作目录,用于存放监控中心的数据

    dubbo.jetty.directory = ${user.home}/monitor

(8)监控中心报表存放目录

    dubbo.charts.directory=${dubbo.jetty.directory}/charts

(9)监控中心数据资料目录

    dubbo.statistics.directory=${user.home}/monitor/statistics

(10)监控中心日志文件路径

    dubbo.log4j.file=logs/dubbo-monitor-simple.log

(11)监控中心日志记录级别

    dubbo.log4j.level=WARN

2、Dubbo提供负载均衡方式

(1)Random,随机,按权重配置随机概率,调用量越大分布越均匀,默认方式。

(2)RounRobin,轮询,按权重设置轮询比例,如果存在比较慢的机器容易在这台机器上请求阻塞较多。

(3)LeastActive,最少活跃调用数,不支持权重,只能根据自动识别的活跃数分配,不能灵活调配。

(4)ConsistenHash,一致性hash,对相同参数的请求路由到一个服务提供者上,如果有类似灰度发布需求可采用。

3、Dubbo过滤器

Dubbo初始化过程加载ClassPath下的META-INF/dubbo/internal/,META-INF/dubbo/,META-INF/services/三个路径下的com.alibaba.dubbo.rpc.Filter文件。文件内容:

    Name = FullClassName,这些类必须实现Filter接口。

自定义Filter类:

配置文件在配置过滤器,consumer.xml中:

Dubbo对过滤器的加载过程:

    先加载三个路径下的com.alibaba.dubbo.rpc.Filter文件里面的键值对,key为过滤器名称,value为过滤器的类的全限定名(这个类必须实现Dubbo中的Filter接口)。

    自定义的类中@Active注解是过滤器设定的全局基本属性。

    Spring在加载consumer.xml文件时,通过 dubbo:consumer filter="xxx" id = "xxx" retrries = "0"这个配置指定消费者端要加载的过滤器,通过filter属性指定过滤器名称。

@Activate注解-自动激活,group属性是表示匹配了对应的角色才被加载,value表示表明过滤条件,不写则表示所有条件都会被加载,写了则只有dubbo URL中包含该参数名且参数值不为空才被加载,这个参数会以dubbo协议的一个参数K-V对传到Provider。

4、Dubbo的Provider配置

5、Dubbo的Consumer配置

1、Dubbo是什么?

Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式框架。

2、为什么使用Dubbo?

很多公司都在使用,经过很多线上的考验,内部使用了Netty,Zookeeper,保证了高性能可用性。

使用Dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可以提高业务复用灵活性扩展,使前端应用能快速的响应对边的市场需求。分布式架构可以承受更大规模的并发流量。

Dubbo的服务治理图:

3、Dubbo和Spring Cloud的区别

两个没有关联,但是非要说区别,有如下几点:

(1)通信方式不同,Dubbo使用RPC通信,Spring Cloud使用HTTP Restful方式

(2)组成部分不同

4、Dubbo支持的协议

dubbo://  (推荐);rmi:// ;hessian:// ;http:// ;webservice:// ;thrift:// ;memcached:// ;redis:// ;rest:// 。

5、Dubbo需要容器吗?

不需要,如果硬要容器的话,会增加复杂性,同时也浪费资源。

6、Dubbo内置的服务容器

Spring Container;Jetty Container;Log4j Container。

7、Dubbo中节点角色

Register,Monitor,Provider,Consumer,Container(服务运行的容器)。

8、Dubbo的服务注册和发现的流程图

9、Dubbo的注册中心

默认使用Zookeper作为注册中心,还有Redis,Multicast,dubbo注册中心。

10、Dubbo的配置方式

Spring配置方式和Java API配置方式

11、Dubbo的核心配置

(1)dubbo:service 服务配置

(2)dubbo:referece 引用配置

(3)dubbo:protocol 协议配置

(4)dubbo:application 应用配置

(5)dubbo:registry 注册中心配置

(6)dubbo:monitor 监控中心配置

(7)dubbo:provider 提供方配置

(8)dubbo:consumer 消费方配置

(9)dubbo:method 方法配置

(10)dubbo:argument 参数配置

12、在Provider 节点上可以配置Consumer端的属性有哪些?

(1)timeout:方法调用超时

(2)retries:失败重试次数,默认是2次

(3)loadbalance:负载均衡算法,默认随机

(4)actives消费者端,最大并发调用控制

13、Dubbo启动时如果依赖的服务不可用会怎样

Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成。默认check ="true"。

14、Dubbo序列化框架

推荐使用Hessian序列化,还有Dubbo,FastJson,Java自带序列化。

15、Dubbo的通信框架

默认使用Netty框架,另外也提供了Mina,Grizzly。

16、Dubbo集群容错方案

(1)Failover Cluster,失败自动切换,自动重试其他服务器。

(2)Failfast Cluster,快速失败,立即报错,只发起一次调用。

(3)Failsafe Cluster,失败安全,出现异常时,直接忽略。

(4)Failback Cluster,失败自动恢复,记录失败请求,定时重发。

(5)Forking Cluster,并行调用多个服务器,只要一个返回成功即可。

(6)Broadcast Cluster,广播逐个调用所有提供者,任意一个报错则报错。

17、Dubbo的负载均衡策略

(1)Random LoadBalance,随机,按权重设置随机概率,默认。

(2)RoundRobin LoadBalace,轮询,按公约后的权重设置轮训比例。

(3)LeastActive LoadBalace,最少活跃调用数,相同活跃数的随机。

(4)ConsistenHash LoadBalance,一致性hash,相同参数的请求总是发到用一个服务器。

18、指定某一个服务

可以配置环境点对点直连,绕过注册中心,将以服务接口为单位,忽略注册中心的提供者列表。

dubbo:reference interface="com.weidian.dubbo.IMyDemo" version="1.0" id="myDemo" url="dubbo://127.0.0.1:20880/"/dubbo:reference

19、Dubbo多协议

Dubbo允许配置多协议,在不同服务器上支持不同协议,或者同一服务支持多种协议。

20、当一个服务有多种实现时怎么做?

当一个接口有多种是现实,可以用group属性来分组,服务提供方和消费方都指定同一个group即可。

21、兼容旧版本

使用版本号过度,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。

22、Dubbo可以缓存吗?

Dubbo提供声明式缓存,用于加速热门数据的访问速度,以减少用户加缓存的工作量。

23、Dubbo服务之间的调用时阻塞的吗?

默认是同步等待结果阻塞的,支持异步调用。Dubbo是基于NIO的非阻塞实现并行调用的,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个Future对象。

24、Dubbo不支持分布式事务

25、Dubbo必须依赖的包

Dubbo必须依赖JDK,其他为可选。

26、Dubbo使用过程中的问题

Dubbo的设计目的是为了满足高并发小数据量的rpc请求,在大数据量下性能表现不是很好,建议使用rmi或http协议。

27、Dubbo的管理控制台的作用

路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡。

28、Spring boot整合Dubbo

(1)添加依赖

        !-- --

        dependency

            groupIdcom.alibaba.boot/groupId

            artifactIddubbo-spring-boot-starter/artifactId

            version0.1.0/version

        /dependency

        !-- --

        dependency

            groupIdcom.101tec/groupId

            artifactIdzkclient/artifactId

            version0.10/version

        /dependency

(2)配置dubbo

    ## Dubbo 服务提供者配置

    spring.dubbo.application.name=provider

    spring.dubbo.registry.address=zookeeper://127.0.0.1:2181

    spring.dubbo.protocol.name=dubbo

    spring.dubbo.protocol.port=20880

    spring.dubbo.scan=org.spring.springboot.dubbo

    ## Dubbo 服务消费者配置

    spring.dubbo.application.name=consumer

    spring.dubbo.registry.address=zookeeper://127.0.0.1:2181

    spring.dubbo.scan=org.spring.springboot.dubbo

关于dubbo和dubbo基于什么协议的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表