SpringBoot+Dubbo详细整理和介绍

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

Dubbo RPC 调用流程主要涉及到4个模块:

1Registry:服务注册,我们一般会采取Zookeeper 作为我们的注册中心

2Provider:服务提供者(生产者),提供具体的服务实现

3Consumer:消费者,从注册中心中订阅服务

4Monitor:监控中心,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

 

posted on 2019-08-02 10:14  UnmatchedSelf  阅读(808)  评论(0编辑  收藏  举报

导航