搭建一个简单的springboot+dubbo的入门项目,首先要启动一个zookeeper作为注册中心,然后启动一个springboot的dubbo服务提供者,再启动一个springboot的dubbo服务消费者,那么服务消费者就可以在启动时去注册中心拿到dubbo服务提供者的调用连接,然后服务消费者直连dubbo服务提供者获取服务。
注:不启动注册中心,在dubbo消费者指定dubbo服务提供者的url,dubbo消费者也可以获取dubbo服务者提供的服务,这里的注册中心只是一个媒介,用来记录dubbo服务提供者的地址,然后告诉dubbo消费者。所以,当dubbo消费者已经有dubbo服务提供者的地址后,就算注册中心宕机了,dubbo消费者依然可以通过自己的缓存去直连dubbo服务提供者
一、首先启动zookeeper的注册中心
- 先到官网下载一个zookeeper,我这里下的是3.5.5版本
https://archive.apache.org/dist/zookeeper/zookeeper-3.5.5
注:下载apache-zookeeper-3.5.5-bin.tar.gz ,带有-bin的是表示已经编译好可以直接用的,而apache-zookeeper-3.5.5.tar.gz 是源码无法直接使用,解压的目录lib文件夹都没有,如果下载了zookeeper-3.5.5.tar.gz ,最后启动的时候会提示 错误:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
- 将下载后的 zookeeper 解压,然后把conf目录下的zoo_sample.cfg重命名为 zoo.cfg
- 在zoo.cfg里面加入下面这行表示zookeeper的数据存放目录(填写自己的windows目录)
dataDir=D:\\Software\\apache-zookeeper-3.5.5\\data
- zookeeper默认的2181端口,如果要修改,在zoo.cfg修改如下这行
clientPort=2181
- 双击apache-zookeeper-3.5.5-bin\bin目录下的zkServer.cmd即可启动zookeeper
二、新建一个maven项目
(作为主项目,然后里面建一个存放接口的module,作为jar包引入dubbo消费者、提供者,再建一个消费者module,一个服务提供者module)
三、新建一个dubbo-interface的module,里面只写一个接口
public interface IDubboDemoService {
String sayHello();
}
四、新建一个dubbo-provider的module,作为dubbo服务提供者
- 首先在pom.xml引入springboot+dubbo的jar以及引入刚刚的只有接口的dubbo-interface的jar
<dependencies>
<!--服务提供 dubbo公共接口 -->
<dependency>
<groupId>cn.com.xinlin</groupId>
<artifactId>dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 引入spring-boot-starter以及dubbo和curator的依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<!-- Spring Boot相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- springboot web模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- 在resource目录下新建application.properties文件,填写dubbo的配置信息
#当前服务/应用的名字
dubbo.application.name=dubbo-service-provider
#注册中心的协议和地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
#通信规则(通信协议和接口)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#连接监控中心
dubbo.monitor.protocol=registry
#开启包扫描,可替代 @EnableDubbo 注解
##dubbo.scan.base-packages=cn.com.xinlin
3.在新建一个application的主类,里面加上dubbo扫包注解和springboot的注解
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
- 实现刚刚引入的dubbo-interface里面的接口
package xinlin.service.dubbo.impl;
import cn.com.xinlin.service.IDubboDemoService;
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class DubboDemoService implements IDubboDemoService {
@Override
public String sayHello() {
return "hello world";
}
}
注:这里的@Service是dubbo里面的注解而非spring的注解,这个dubbo注解表示这个service服务提供者提供的服务注册到注册中心去
5.服务提供者就完成了
五、新建一个dubbo-consumer的module,作为dubbo服务消费者
- pom.xml和生产者一样,引入springboot和dubbo的jar,以及dubbo-interface的jar
- 在resource目录下新建application.properties文件
#避免和监控中心端口冲突,设为8081端口访问
server.port=8081
dubbo.application.name=duubbo-service-consumer
dubbo.protocol.name=dubbo
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry
- 新建一个controller,里面调用dubbo服务提供者的服务
@Controller
@RequestMapping("/demo")
public class DemoController {
@Reference(timeout = 3000)
IDubboDemoService dubboDemoService;
@ResponseBody
@RequestMapping(value = "/say")
public String sayHello(){
String str = dubboDemoService.sayHello();
return str;
}
}
注:这里的@Reference是dubbo的注解,表示获取相关的dubbo服务,springboot项目启动后会从根据这个注解去注册中心获取这个dubbo服务提供者
- 在新建一个application的主类,里面加上dubbo扫包注解和springboot的注解,和上面的服务提供者一样
@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
- dubbo服务消费者就完成了
六、测试整个流程
1.启动zookeeper
2.启动dubbo-provider
3.启动dubbo-consumer
4.在浏览器测试接口是否有成功调用dubbo接口返回数据
参考:
雪山上的蒲公英的Dubbo整合SpringBoot