环境准备
本文讲解SpringBoot和Dubbo的集成Demo,采用Zookeeper作为注册中心,我们首先要搭建一个Zookeeper的环境。
博主采用的Docker方式进行安装的,如需采用这种方式安装,请自行准备Docker环境支持。
也可以windows环境下安装zookeeper教程详解(单机版)
获取zookeeper镜像
docker pull zookeeper
主机上建立挂载目录和zookeeper配置文件
mkdir -p /home/data/zookeeper_data/conf
mkdir -p /home/data/zookeeper_data/data
启动容器
docker run -d --name zookeeper -p 2181:2181 --restart=always -v /home/data/zookeeper_data/data:/data -v /home/data/zookeeper_data/conf:/conf zookeeper:latest
项目结构
我们先用IDEA新建一个空项目,后面再进行添加Module。
然后新建一个Jar方式的API接口的一个Module,直接采用Maven方式新建就好了。
然后采用Spring Initialize方式添加两个Module(consumer、provider)。
最后项目结构就是这样啦
编码
API
准备好上面的代码接口我们开始写一个Demo进行一个测试。
首先在Api模块中,先自定义个TestApi的一个接口,写一个test方法。
package com.hammer.api;
public interface TestApi {
String test();
}
写完后我们进行mvn install一下打包进仓库,因为后面模块需要引用找个包。
我们公共Api方法已经写好了,开始准备Dubbo两个重要的角色了,服务提供方和服务消费方,我们首先要准备POM文件,导入Dubbo相关依赖和我们之前准备的API包。provider和consumer两个模块的POM文件新增如下配置:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.10</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.10</version>
</dependency>
<!-- 第一步新建的API包 -->
<dependency>
<groupId>com.hammer</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Provider
yml配置:
application.yml
增加Dubbo相关配置。
dubbo:
application:
name: provider
registry:
address: zookeeper://xxx.xxx.xxx:2181 #ZK注册中心地址
服务提供:
新建一个service类,实现API中的TestApi接口,实现方法test(),注意:我们这里的重点是Duubo的注解,@DubboService
修饰于Service类上,代表这个服务提供到注册中心。
package com.hammer.provider.service;
import com.hammer.api.TestApi;
import org.apache.dubbo.config.annotation.DubboService;
@DubboService
public class TestApiImpl implements TestApi {
@Override
public String test() {
return "你好,世界!";
}
}
启动类加上开启Dubbo注解。
package com.hammer.provider;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
到这里我们的服务提供方就写完了,是不是很简单呢,重点就是@DubboService
。
Consumer
yml配置
同样application.yml
增加Dubbo相关配置。
dubbo:
application:
name: consumer
registry:
address: zookeeper://xxx.xxx.xxx:2181
server:
port: 8081 #应为我这里是将服务起在一台电脑, 和生产者的tomcat端口区分以免冲突
服务消费
服务消费我们采用接口访问进行展示,所以我们POM需要增加web支持,在创建时已经勾选了就不用加了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我们新建一个Controller类,写一个测试方法,提供一个接口出去,我们引用注解@DubboReference
依赖注入提供者提供的服务,然后直接调用服务方法即可。
package com.hammer.consumer.controller;
import com.hammer.api.TestApi;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestApiController {
@DubboReference
private TestApi testApi;
@GetMapping("/test")
public String test(){
return testApi.test();
}
}
测试
相关演示案例我们就写完了,开始进行一个测试验证,首先启动生产者(provider)再次启动消费者(consumer),打开浏览器访问http://localhost:8081/test
即可看到有结果输出,此结果就是生产者实现接口返回的。
进行验证,运行命令进入Docker Zookeeper容器。
docker exec -it 容器id /bin/bash
然后进入容器内部bin目录,连接ZK,执行命令。
./zkCli.sh
连接成功后我们输入相关命令来查看ZK内部服务相关数据,可以看到已经有我们写的TestApi服务已经成功注册ZK里了。