dubbo是什么?
它是阿里巴巴开源基于java高性能RPC分布式服务框架,目前以成为Apache基金会孵化项目。
为什么要用dubbo?
因为是阿里开源项目,国内很多互联网公司都在用,已经经过很多线上考验,内部使用了Netty/Zookeeper保证了高性能,高可用性。
dubbo与spring cloud有什么不同?
通信方式不同:dubbo使用RPC协议,Spring Cloud使用了Http RestFul协议。
dubbo支持什么协议?
使用dobbo和http协议
Dubbo需要 Web 容器吗?
不需要,如果硬要用WEB容器,只会增加复杂性,也浪费了资源。
dubbo分组使用:实现了环境的隔离。
简单架构分析:
Container:服务运行容器。
Provider:暴漏服务及服务提供方 1.提供接口 2.提供实现接口类 3.注册服务 4.接收消费方的访问Tomacat/netty。
Registry:服务注册与发现中心 记录服务名和提供服务的ip地址{服务A:{ip1,ip2,ip3}},说明提供服务的有三台机器。
Consumer:调用远程服务的服务消费方。1.根据服务名在registry中查ip地址 2.进行负载均衡 3.调用服务
从rehgistry拿到ip地址之后,通过负载均衡(随机,轮询,hash)取出一个ip地址调用服务A
invoke:通过接口名,方法名,方法参数列表,方法参数值列表执行方法。
Monitor:统计服务调用的次数和调用时间的监控中心。
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="hello-world-app" />
<!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
<!-- 和本地bean一样实现服务 -->
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />
配置介绍:
<dubbo:service/> | 服务配置 | 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 |
<dubbo:reference/>[2] | 引用配置 | 用于创建一个远程服务代理,一个引用可以指向多个注册中心 |
<dubbo:protocol/> | 协议配置 | 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 |
<dubbo:application/> | 应用配置 | 用于配置当前应用信息,不管该应用是提供者还是消费者 |
<dubbo:module/> | 模块配置 | 用于配置当前模块信息,可选 |
<dubbo:registry/> | 注册中心配置 | 用于配置连接注册中心相关信息 |
<dubbo:monitor/> | 监控中心配置 | 用于配置连接监控中心相关信息,可选 |
<dubbo:provider/> | 提供方配置 | 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选 |
<dubbo:consumer/> | 消费方配置 | 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选 |
<dubbo:method/> | 方法配置 | 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息 |
<dubbo:argument/> | 参数配置 | 用于指定方法参数配置 |