Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。
Dubbo 的RPC 调用流程主要涉及到4个模块:
1、Registry:服务注册,我们一般会采取Zookeeper 作为我们的注册中心
2、Provider:服务提供者(生产者),提供具体的服务实现
3、Consumer:消费者,从注册中心中订阅服务
4、Monitor:监控中心,RPC调用次数和调用时间监控
从上图中我们可以看出RPC 服务调用的过程主要为:
1、生产者发布服务到服务注册中心
2、消费者在服务注册中心中订阅服务
3、消费者调用已注册的服务
下面笔者给大家讲解在IDEA环境下如何实现将SpringBoot与Dubbo整合
先来看common下的pom文件:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.boot.dubbo
common
0.0.1-SNAPSHOT
pom
common
http://maven.apache.org
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
UTF-8
com.alibaba.spring.boot
dubbo-spring-boot-starter
1.0.1
org.apache.zookeeper
zookeeper
3.4.11
com.101tec
zkclient
0.10
api
provider
consumer
由上图可以看出公共pom主要引入了: SpringBoot依赖,dubbo-springBoot依赖,zookeeper依赖,zkClient依赖等。
下面笔者将逐个讲解各个模块:
一、 provider(服务提供者)
pom文件如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
com.boot.dubbo
common
0.0.1-SNAPSHOT
provider
provider
http://maven.apache.org
UTF-8
org.springframework.boot
spring-boot-starter-web
因为笔者将provider作为web形式启动,所以仅需要引入spring-boot-starter-web即可。
src/main/resources/application.yml配置如下:
接口定义IBookService.java代码如下:
接口实现BookServiceImpl.java代码如下:
注意该类有两个service注解,一个是alibaba的,一个是spring的,大家要注意区分。
Application.java代码如下:
springBoot启动加入了@EnableDubboConfiguration,表示启动dubbo配置。
注意,在本地测试之前,必须先下载zookeeper在本地,然后启动zookeeper,然后运行provider模块,使服务注册到zookeeper!
二、consumer(服务消费者)
pom文件如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
com.boot.dubbo
common
0.0.1-SNAPSHOT
consumer
consumer
http://maven.apache.org
UTF-8
consumer没有引入任何依赖,因为该模块只有接口定义,没有实现。
三、api(测试接口)
pom文件如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
com.boot.dubbo
common
0.0.1-SNAPSHOT
api
api
http://maven.apache.org
UTF-8
org.springframework.boot
spring-boot-starter-web
com.boot.dubbo
consumer
0.0.1-SNAPSHOT
api只需要引入consumer模块(只有接口定义,没有实现,没有application.yml)即可。
DubboController.java代码如下:
在调用consumer模块定义的service的时候,必须要加入@Reference注解。
Application.java代码如下:
@EnableDubboConfiguration表示启动dubbo配置。
下面开始进行测试(必须先将本地zookeeper启动):
1、首先将provider模块启动:
2、启动api:
3、访问: http://localhost:8080/test
SpringBoot+Dubbo详细整理和介绍