SpringBoot+Dubbo+Zookeeper搭建教程
写在前面的话:技术路上的坑只能一个一个的踩过去了吗?以为很简单,但还是浪费了很长时间。。。这是目前发现的配置最简单的一种搭建方式。
项目GitHub地址
https://github.com/libaolei007/springboot-dubbo-zookeeper
搭建前需要安装Zookeeper
https://blog.csdn.net/weixin_39819880/article/details/98472507
文章目录
一.创建名称为springboot-dubbo-zookeeper的Maven项目
项目创建完成之后,注意检查一下Maven的配置
二.创建module名称为api的Maven项目
api中一般存放entity实体类和service接口,consumer和provider模块都需要依赖这个模块。
三.创建module名称为consumer的springboot项目
consumer作为消费者的角色,可以存放controller控制类,当然,如果有其他的,比如拦截器,权限控制,也可以放这里。
四.创建module名称为provider的springboot项目
provider作为消费者角色,可以存放service接口的实现类,如果项目中集成了mybatis,也可以放在这个模块下
五.项目配置
1.配置springboot-dubbo-zookeeper
在springboot-dubbo-zookeeper的pom.xml文件添加module依赖
<modules>
<module>api</module>
<module>consumer</module>
<module>provider</module>
</modules>
2.配置api
2.1配置api的pom.xml
添加
<packaging>jar</packaging>
2.2创建DemoService接口
package com.rpc.api;
public interface DemoService {
String sayHello(String name);
}
[外链图片转存失败(img-8OhtlkxK-1565009124239)(./1565000077208.png)]
3.配置consumer
3.1配置consumer的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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.rpc.consumer</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consumer</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<dubbo-spring-boot>1.0.0</dubbo-spring-boot>
</properties>
<dependencies>
<!-- 添加对api模块的依赖 -->
<dependency>
<groupId>com.rpc.demo</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Spring Boot Dubbo 依赖 -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>${dubbo-spring-boot}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
主要修改三点:
3.2配置consumer的application.properties
## 避免和provider工程端口冲突
server.port=7001
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
## Dubbo 服务对象的注册中心zookeeper的地址和端口
spring.dubbo.registry.address=zookeeper://192.168.19.22:2181
## 服务对象的被注入的包扫描范围
spring.dubbo.scan=com.rpc.consumer.controller
3.3建立DemoController类
package com.rpc.consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.rpc.api.DemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
public class DemoController {
@Reference(version = "1.0.0")
private DemoService demoService;
@RequestMapping("/getHello")
public String getHello() {
return demoService.sayHello("李保磊");
}
}
4.配置provider
4.1配置provider的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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.rpc.provider</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<dubbo-spring-boot>1.0.0</dubbo-spring-boot>
</properties>
<dependencies>
<!-- 添加对api模块的依赖 -->
<dependency>
<groupId>com.rpc.demo</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Spring Boot Dubbo 依赖 -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>${dubbo-spring-boot}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.12</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
主要修改四点
4.2配置provider的application.properties
server.port=8001
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
## Dubbo 服务对象的注册中心zookeeper的地址和端口
spring.dubbo.registry.address=zookeeper://192.168.19.22:2181
## 用Dubbo协议在20880端口暴露服务
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
## 包扫描范围
spring.dubbo.scan=com.rpc.provider.impl;
4.3创建DemoServiceImpl.java
@Service
注解,是dubbo提供的注解
package com.rpc.provider.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.rpc.api.DemoService;
@Service(version = "1.0.0")
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "Hello" + name;
}
}
5.项目启动
5.1 启动zookeeper
首先要启动zookeeper,它是注册中心,没有启动的话,provider的服务提供者怎么注册呢?
5.2 将api安装到consumer和provider模块中
注意,由于consumer和provider都依赖api,那么要将api模块通过maven,依次通过clean,install命令,将api安装到consumer和provider模块中。
5.3 启动provider
启动provider,将服务注册到zookeeper中心
5.4启动consumer
5.5测试
@Reference注解引入的service实例为null
我哭了,你呢???
哭了几个小时之后,我好了!
我的原因是:
首先检查一下你的spring boot版本是多少?
如果是2.X 不用看了,spring boot 2.x 必定会出现这个问题,
改为 1.5.8 版本。
将consumer和provider里面的pom.xml文件里的parenet标签下的version标签内容改为1.5.8.RELEASE
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>