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文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.boot.dubbo</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>common</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--dubbo-springBoot依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>1.0.1</version>
</dependency>
<!--zookeeper依赖-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.11</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
<modules>
<module>api</module>
<module>provider</module>
<module>consumer</module>
</modules>
</project>
由上图可以看出公共pom主要引入了: SpringBoot依赖,dubbo-springBoot依赖,zookeeper依赖,zkClient依赖等。
下面笔者将逐个讲解各个模块:
一、 provider(服务提供者)
pom文件如下:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.boot.dubbo</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>provider</artifactId>
<name>provider</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
因为笔者将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文件如下:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.boot.dubbo</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>consumer</artifactId>
<name>consumer</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
</dependencies>
</project>
consumer没有引入任何依赖,因为该模块只有接口定义,没有实现。
三、api(测试接口)
pom文件如下:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.boot.dubbo</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>api</artifactId>
<name>api</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.boot.dubbo</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
api只需要引入consumer模块(只有接口定义,没有实现,没有application.yml)即可。
DubboController.java代码如下:
在调用consumer模块定义的service的时候,必须要加入@Reference注解。
Application.java代码如下:
@EnableDubboConfiguration表示启动dubbo配置。
下面开始进行测试(必须先将本地zookeeper启动):
1、首先将provider模块启动:
2、启动api:
3、访问: http://localhost:8080/test
原文地址:https://www.cnblogs.com/ysySelf/p/11286970.html