Dubbo它最大的特点是按照分层的方式来架构:这样可以使得各个层之间解耦合。

1、那么各个层指的是什么呢?

答:从服务模型的角度来看,Dubbo采用的是一种非常简单的模型:提供方提供服务,消费方消费服务,还有一个中间商也就是接口层。

所以基于这一点可以抽象出服务提供方(Provider)、

服务消费方(Consumer)、

接口层(Interface)三个角色。如图:

Alibaba Dubbo工作原理(从问题出发,发散开来)【上】_第1张图片

2、怎么实现Consumer通过Interface来访问它的实现Provider?

答:【Adubbo注册中心】提到这个问题,我们不得不先了解dubbo注册中心

Dubbo的注册中心有很多种,像Multicast、Zookeeper、Redis、Simple等,Dubbo官方推荐使用Zookeeper注册中心

【BZooKeeper】ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务【下篇讲解并学习它】。

【Capplication.properties

要理解SpringBoot集成Dubbo application.properties配置文件,首先要理解SpringBoot依赖注入【在SpringBoot基础里面有讲到】

spring.application.name=dubbo-auto-configuration-provider-demo
dubbo.scan.base-packages=com.css.*.provider
dubbo.protocol.name=dubbo
dubbo.protocol.port=12345
dubbo.registry.address=zookeeper://xxx.xxx.xxx.xxx:2181

【DProvider的application.properties配置文件

spring.application.name表示 【服务名】
dubbo.scan.base-packages提到这个咱们不得不讲讲【dubbo整合springboot的三种方式】

【方式1】

导入dubbo-starter,在application.properties配置属性,使用@Service暴露服务,使用@Reference引用服务

blob.png

blob.png


【方式2】保留dubbo的xml配置文件方式,可以做到精确配置,首先导入dubbo-starter,然后只需要在启动入口处加上:

 使用@ImportResource(locations="classpath:provider.xml")即可

 这种方式就不需要开启@EnableDubbo注解了

【方式3】使用注解API的方式

  每一个dubbo组件标签手动创建到容器中,在一个被@configuration的java文件中创建每一个标签的方法,使用@Bean注解加载到spring容器,然后指定扫描包的路径要包含这个java文件。

dubbo.protocol.name表示用dubbo协议暴露服务
dubbo.protocol.port表示用dubbo协议暴露服务的端口号
dubbo.registry.address表示使用暴露服务地址
【EConsumer的application.properties配置文件】
===
server.port因为dubbo集成tomcat,这里代指tomcat中间件的端口号

3、怎么实现Consumer调用远程Interface来访问它的本地实现Provider?

答:要想理解这个问题,咱们得先理解Maven的仓库和settings.xml配置文件,

Alibaba Dubbo工作原理(从问题出发,发散开来)【上】_第2张图片

Alibaba Dubbo工作原理(从问题出发,发散开来)【上】_第3张图片

Alibaba Dubbo工作原理(从问题出发,发散开来)【上】_第4张图片

【配置完setting.xml之后】

我们加入远程Interface的依赖


    <groupId>com.framework.test.servicesgroupId>

    <artifactId>fmw-svc-deputiesartifactId>

    <version>1.0.0-SNAPSHOTversion>

dependency>

此时Idea就通过设置,进行远程调用

Alibaba Dubbo工作原理(从问题出发,发散开来)【上】_第5张图片【接下来就是下载文件到本地的过程】

Alibaba Dubbo工作原理(从问题出发,发散开来)【上】_第6张图片