由于dubbo在2018年2月15日成为 Apache 基金会孵化项目,所以不再是阿里维护的一个项目了。然后似乎就出现了断层,网络上大部分的文章都是对于阿里阶段的dubbo开发的教程,导致寻找了很久才能找到apache的dubbo开发教程,所以想在这里整理一下最新的dubbo与springboot的简单整合。
zookeeper操作
首先我们需要下载运行zookeeper:
http://mirror.bit.edu.cn/apac...
下载最新的版本,这里需要知道的是项目中的zookeeper版本号最好和下载的版本一致。
我们只需要下载解压之后将conf里面的zoo_sample.cfg复制重命名为zoo.cfg后运行bin下面的zkServer.cmd即可。
如果我们是在linux下面运行的话:
启动ZK服务: sh zkServer.sh start
查看ZK服务状态: sh zkServer.sh status
停止ZK服务: sh zkServer.sh stop
重启ZK服务: sh zkServer.sh restart
dubbo admin搭建
新版本dubbo admin的搭建按照官方的说明很简单就可以搭建完成,具体步骤看官方文档即可:
https://github.com/apache/dub...
项目搭建
这里我用的是IDEA进行开发构建的项目。
项目框架的搭建
- 首先我们需要新建一个空项目:
填上项目名称,然后点击完成即可。
- 由于是新建的空项目,所以我们需要新建模块:
我们这里用的是springboot模块,先新建一个生产者模块:
按照上述的顺序再新建一个消费者模块。
独立模块搭建
- 由于dubbo官网推荐将接口层单独作为一个独立模块使用。然后生产者和消费者均依赖此模块进行操作。
所以我们需要新建一个maven模块。
三个模块建完之后: -
我们首先进行公共模块的开发,也就是common模块的开发。
新建一个实体类和一个service接口:public class User implements Serializable { private String name; private Integer age; public User() { } public User(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
public interface GetUserService { List<User> getUserList(String name); }
因为希望将common模块作为模板,生产者和消费者模块都要继承它,所以在它的pom文件里面整合所有需要的包即可:
<dependencies> <!-- apache的springboot dubbo依赖 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>io.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency> <!-- Zookeeper客户端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.2.0</version> </dependency> </dependencies>
common模块开发结束了。
生产者模块开发
-
现在开发生产者模块,只需要继承common模块,然后实现service接口即可。
这里的Service是apache.dubbo的包,需要注意。@Service public class GetUserServiceImpl implements GetUserService { @Override public List<User> getUserList(String name) { //此处没有连接数据库,所以就先生成几条数据返回即可。 System.out.println(name); List<User> list = new ArrayList<>(); list.add(new User("小明",20)); list.add(new User("小强",21)); list.add(new User("小红",22)); return list; } }
-
将application.properties改名为application.yml,然后进行配置
server: port: 8082 #端口号 dubbo: application: name: provider #当前服务/应用的名字 # scan: # base-packages: com.zhouxiaoxi.provider.service.impl #开启包扫描,可替代 @EnableDubbo 注解 monitor: protocol: registry #连接监控中心 protocol: name: dubbo #通信协议 port: 20880 #接口 registry: address: 127.0.0.1:2181 #注册中心的地址 protocol: zookeeper #注册中心的协议
在这里我们还是在启动类上添加 @EnableDubbo 注解,因为比较简便:
@EnableDubbo @SpringBootApplication public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }
然后我们需要在pom文件里面继承common的模块:
<dependencies> <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> <!-- common模块 --> <dependency> <groupId>com.zhouxiaoxi</groupId> <artifactId>common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
现在可以启动生产者,然后看dubbo admin界面就会发现一个提供者:
消费者模块开发
-
接下来我们继续开发消费者:
这里我们只是需要写一个controller来调用一下这个接口就可以了:@RestController public class GetUserController { @Reference GetUserService getUserService; @RequestMapping("getUserList") public List<User> getUserList(@RequestParam("name") String name){ return getUserService.getUserList(name); } }
-
将application.properties改名为application.yml,然后进行配置
server: port: 8081 #端口号 dubbo: application: name: consumer #当前服务/应用的名字 # scan: # base-packages: com.zhouxiaoxi.provider.service.impl #开启包扫描,可替代 @EnableDubbo 注解 monitor: protocol: registry #连接监控中心 protocol: name: dubbo #通信协议 port: 20880 #接口 registry: address: 127.0.0.1:2181 #注册中心的地址 protocol: zookeeper #注册中心的协议
在这里我们还是在启动类上添加 @EnableDubbo 注解,因为比较简便:
@EnableDubbo @SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
然后我们需要在pom文件里面继承common的模块并且添加web依赖:
<dependencies> <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> <!-- web依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.9.RELEASE</version> </dependency> <!-- common模块 --> <dependency> <groupId>com.zhouxiaoxi</groupId> <artifactId>common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
现在可以启动消费者,然后看dubbo admin界面就会发现一个消费者:
测试
访问http://localhost:8081/getUserList?name=zhouxiaoxi即可看到相应的返回值。
至此我们的springboot与apache dubbo的整合就结束了。
该项目已经上传到github上面,大家可以下载运行一下:
https://github.com/zhouzhaodo...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。