目录
1. 概述
本文可能是网上能找到的最简单的 dubbo 项目搭建的资料。
本文是针对 dubbo 入门者的文章,dubbo初学者都不必看这篇文章。
本文旨在帮助 dubbo 入门者快速的理解dubbo是如何使用的,因此放弃了所有不必要的技术,只单纯的基于 springboot+dubbo+zookeeper 实现了服务生产者和消费者的开发。
本文的技术栈包括 maven + springboot + dubbo + zookeeper。
本文开发的 dubbo服务提供者提供了一个接口,只有一个方法 String sayHi(String uname) ,服务消费者调用这个接口的时候,传入 uname用户姓名,将返回 08:51:54 :: Hello , uname!!! 这样的字符串。
功能就是这么简单,咋地!!!就是为了提供最单纯的 dubbo 入门项目!!
本文是 最简单Dubbo案例三部曲之三,前两篇为:
《最简单的Dubbo案例之一:dubbo实现服务提供者+消费者,无zookeeper方式点对点直连_cuipy的博客-CSDN博客》
《最简单的Dubbo案例之二:dubbo实现服务提供者+消费者,SpringBoot + dubbo 无zookeeper方式点对点直连_cuipy的博客-CSDN博客》
2. 项目结构
结构见下图:
与前两篇类似,本项目也是基于maven 搭建的,首先做了一个dubbo3 作为 parent 项目,然后其下放了两个模块,分别为 dubbo的服务提供者和服务消费者。
3. zookeeper的安装和启动
本项目需要启动 zookeeper 作为注册中心,因此,需要安装和启动 zookeeper。
关于 zookeeper 的安装我就不详细赘述了,网上资料很多。
本文的开发环境是在 windows下,我直接下载了 zookeeper 官方的bin 压缩包,解压就可以使用了,并不需要安装。我下载的版本是 zookeeper 3.7.0 .
注意要自行配置一下 zoo.cfg 文件,该文件默认不存在,有一个 example 文件在 conf/zoo_example.cfg ,可以根据这个文件进行修改。具体的配置方法我就不赘述了,可自行百度。
为了方便调用 zookeeper的命令,请将 bin 文件夹配置到环境变量 PATH 中
最后启动: 在Linux下启动使用 zkServer.sh start 命令,而 windows下我尝试应该直接使用 zkServer ,其实指向的是 bin/zkServer.cmd 文件。
4. dubbo3 父项目
首先我们看看 dubbo3 父项目
这个项目没别的,就是一个pom.xml文件,这个项目目的就是管理子项目的通用依赖。
4.1. pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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.pingbu</groupId>
<artifactId>dubbo3</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<modules>
<module>SayProvider</module>
<module>SayConsumer</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.11</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</project>
依赖中加入了 zookeeper、 zkclient 以及 curator 等依赖,这些依赖不赘述了,网上资料很多。
5. SayProvider 服务提供者模块
先看看项目结构,如下图:
结构很简单,只提供了几个文件:
pom.xml文件: 不赘述
application.yml文件:不赘述
AppMain 类文件: 不赘述
SayService接口文件: 这是服务提供者的接口,该接口就提供了一个方法 sayHi,调用该方法将返回 08:51:54 :: Hello , 天堂!!! 这样的字符串。
SayServiceImpl 接口实现类文件: 实现 SayService 接口。
接下来就一个文件捋捋。
5.1. pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<groupId>com.pingbu</groupId>
<artifactId>dubbo3</artifactId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>SayProvider</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
依赖中加入了 spring-boot-start ,而没有 web 相关的东西,这个项目不需要 web ,dubbo 与 web无关,因此尽可能选择 简单 、单纯的 spring启动方式。
5.2. application.yml 配置文件
dubbo:
application:
name: sayProvider
owner: pingbu
monitor:
protocol: registry
registry:
address: zookeeper://127.0.0.1:2181
这个文件只对 dubbo 进行了一些配置,网上的大多数资料都是将这些配置项放在 xml 文件中,很少有针对 spring-boot 的配置说明,我在本项目中针对 spring-boot 做了移植。
dubbo.application : 主要是配置dubbo的服务名称,这个服务名称是注册到注册中心的名称,我们需要的注册中心就是 zookeeper。
dubbo.registry.address: 指向的是 zookeeper ,就是在前文安装和启动的那个 zookeeper ,具体的ip和port 自行调整。
5.3. AppMain springboot主类
package com.pingbu.dubbo2;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class AppMain {
public static void main(String[] args) {
SpringApplication.run(AppMain.class, args);
}
}
注意,这里增加了 @EnableDubbo 注解。
5.4. SayService 接口文件
简单的令人发指
package com.pingbu.dubbo2.provider;
public interface SayService {
String sayHi(String uname);
}
5.5. SayServiceImpl 实现类文件
package com.pingbu.dubbo2.provider;
import org.apache.dubbo.config.annotation.DubboService;
import java.text.SimpleDateFormat;
import java.util.Date;
@DubboService(version = "1.0.0",timeout = 3000)
public class SayServiceImpl implements SayService {
@Override
public String sayHi(String uname){
SimpleDateFormat sdf =new SimpleDateFormat("HH:mm:ss");
String time1 = sdf.format(new Date());
return time1+" :: Hello , "+uname ;
}
}
可以看到,这里做了一个 @DubboService 注解,这是暴露 dubbo 接口服务的。
这就是 服务提供者的全部。
6. SayConsumer 服务消费者项目
本项目将消费 SayProvider 的服务。
本模块继承自 dubbo3 项目
6.1. 项目结构
可以看到,只有5个文件
pom.xml 文件: 不解释
application.yml 文件: 不解释
AppMain SpringBoot 主类文件: 不解释
SayService 接口文件: 对应服务提供者的接口文件,包名、接口名、方法名,必须都一样。
SayController 文件:目的是通过web 方式进行 dubbo 服务调用的测试。
6.2. pom.xml文件
代码如下
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>dubbo3</artifactId>
<groupId>com.pingbu</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>SayConsumer</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
为了方便测试,引入了springboot的web依赖,并非 dubbo 的依赖要求。
6.3. application.yml 文件
代码如下:
server:
port: 8086
dubbo:
application:
name: SayConsumer
owner: pingbu
registry:
address: zookeeper://127.0.0.1:2181
dubbo.application: 配置服务名称,目的是注册到 zookeeper中,必须唯一。
dubbo.registry.address: 指向注册中心,即 zookeeper 的地址。
6.4. AppMain SpringBoot主类文件
package com.pingbu.dubbo2;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class AppMain {
public static void main(String[] args) {
SpringApplication.run(AppMain.class, args);
}
}
增加了 @EnableDubbo 注解
6.5. SayService 接口文件
package com.pingbu.dubbo2.provider;
public interface SayService {
String sayHi(String uname);
}
6.6 SayController 文件
package com.pingbu.dubbo2.controller;
import com.pingbu.dubbo2.provider.SayService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/say")
public class SayController {
@DubboReference(version = "1.0.0" , check = false)
private SayService sayService;
@GetMapping(value = "/hi")
public String hi(){
String res = sayService.sayHi("天堂!!!");
return res ;
}
}
关键是 @DubboReference 注解,这个注解将的到 服务提供者的对象。
消费者的代码就这些了。
7. 启动测试
7.1. 启动 zookeepr
windows下启动: 执行 zookeeper安装路径/bin/zkServer.cmd 文件即可
Linux下启动: 执行 zkServer.sh start 命令即可
必要的环境变量的配置不赘述。
7.2. SayProvider 启动
在 SayProvider根路径下,执行 mvn clean spring-boot:run ,启动成功。
7.3. SayConsumer 启动
在 SayConsumer根路径下,执行 mvn clean spring-boot:run ,启动成功。
7.4. 测试
打开浏览器,访问地址: http://127.0.0.1:8086/say/hi
在页面看到下面的内容,即说明执行成。
8. 结尾的话
至此,这一系列3篇文章就都写完了,希望对您有帮助,也是为了给自己记录一下笔记。