一:前话
我可能大概估计花了N个小时来跑一个springboot-dubbo demo,网上的demo依赖版本千奇百怪,各种跑不通,各种版本不兼容,差点要死在制作demo的路上,想想还有爬起来继续撸教程,终于皇天不负有心人,撸通了一个demo。
项目地址 :springboot-dubbo-demo项目地址
在撸通一个demo之后,我看一下,demo中所需要的jar
一个springboot整合dubbo的demo需要的jar包,只要有这个包一切ok
- com.alibab:dubbo 包
- org.apache.zookeeper 包
- zookeeper客户端包 com.101tec:zkclient或者org.apache.curator:curator-framework
二:demo制作工艺
- 跑一个本地zookeeper
网上教程一大堆,且流程完全ok,zookeeper版本为3.4.14 - 项目包结构
项目采用聚合工程来做,maven父工程+3个springboot子工程
父工程的pom文件
我们的pom文件只有一个依赖,是的,你没看错,就只有一个依赖。dubbo-spring-boot-starter中包含我们所需要的jar包,包括spring-boot-starter
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lll</groupId>
<artifactId>springboot-dubbo-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-dubbo-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- api
api项目结构:
api项目中不进行配置,只有两个效果,提供pojo或者接口,我们在这里只进行提供接口
public interface UserApi {
String say();
}
- provider
provider项目结构:
pom文件
<?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>
//这里需要修改以这个父工程,默认是springboot项目
<parent>
<groupId>com.lll</groupId>
<artifactId>springboot-dubbo-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lll</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider</name>
<description>Demo project for Spring Boot</description>
//导入接口
<dependencies>
<dependency>
<groupId>com.lll</groupId>
<artifactId>api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
接口实现:
@Service
public class UserService implements UserApi {
@Override
public String say() {
return "hello,springboot-dubbo";
}
}
yml配置:
dubbo:
application:
name: dubbo-provider
registry:
address: zookeeper://localhost:2181
protocol:
port: 20880
name: dubbo
//这里需要注意下,base-packages配置不行,需要修改
scan:
basePackages: com.lll.provider.service
启动类不需要配置,正常的springboot注解
- comsumer
comsumer项目结构:
POM和provier项目配置一样,引入接口,修改parent信息
controler:消费服务
@RestController("/user")
public class UserController {
@Reference
private UserApi userApi;
@GetMapping
public String hello(){
return userApi.say();
}
}
yml配置
dubbo:
application:
name: dubbo-comsumer
registry:
address: zookeeper://localhost:2181
最后跑一下demo,依次启动zookeeper→privoder→comsumer。
Zoolnspector可视化图像:
网页8080端口访问: