现在越来越多的公司开发项目中使用了springboot作为搭建服务的框架,而dubbo是一款国内使用较多的SOA架构开发的中间件,其主要由三个部分组成:生产者,消费者,注册中心。注册中心一般使用的是zookeeper。于是我们从头来捋一捋如何搭建一个springboot+dubbo项目。
第一步,本地搭建zookeeper注册中心
请参考文章:springboot整合dubbo+zookeeper(一)
第二步,本地搭建dubbo监控控台dubbo-admin
请参考文章:springboot整合dubbo+zookeeper(二)
第三步,将服务注册到zookeeper
- 新建一个springboot项目
项目代码结构如下:
- 服务接口定义
package com.dubbo.service;/** * @author test * @time 2019/8/27 17:51 * @description: * 一些模拟数据库事务的方法 */public interface TestService { public void insert(); public void delete(); public void update(); public void select();}
- 用到的两个主要依赖包
org.apache.dubbo dubbo-spring-boot-starter 2.7.7com.101tec zkclient 0.10
- 生产者相关代码及配置
pom主要配置:
application.properties:
接口服务实现:
package com.dubbo.provider.service.impl;import com.alibaba.dubbo.config.annotation.Service;import com.dubbo.service.TestService;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author test * @time 2019/8/27 15:35 * @description: * 模拟数据库事务实现 */@Service(version = "1.0.0",timeout = 3000)public class TestServiceImpl implements TestService { private Logger log = LoggerFactory.getLogger(TestServiceImpl.class); @Override public void insert() { System.out.println("insert 服务"); } @Override public void delete() { System.out.println("delete 服务"); } @Override public void update() { System.out.println("update 服务"); } @Override public void select() { System.out.println("select 服务"); }}
注意:添加@Service注解,切记注解不是用spring的service注解,是 com.alibaba.dubbo.config.annotation.Service,由阿里提供的dubbo的注解,配上版本号1.0.0说明向zookeeper注册的是版本为1.0.0的TestService接口,超时时长为3000ms等信息。
application.properties 参数配置:
com.dubbo.testprovider0.0.1-SNAPSHOTproviderorg.apache.dubbodubbo-spring-boot-starter2.7.7com.101teczkclient0.10
启动类:
package com.dubbo.provider;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); }}
步骤总结:
1.搭建pom环境
2.写好配置文件(一定要写上dubbo.scan.base-packages该配置会扫描你写的服务并注册到zookeeper)
3.具体服务实现
4.运行springboot启动类即可
- 消费者相关代码及配置
pom主要配置:
com.dubbo.testconsumer0.0.1-SNAPSHOTconsumercom.dubbo.testservice1.0-SNAPSHOTorg.apache.dubbodubbo-spring-boot-starter2.7.7com.101teczkclient0.10
application.properties 参数配置:
#避免端口冲突server.port=8083#dubbo configurationdubbo.application.name=dubbo_consumerdubbo.registry.protocol=zookeeperdubbo.registry.address=zookeeper://127.0.0.1:2181
远程调用入口:
package com.dubbo.consumer.controller;import com.alibaba.dubbo.config.annotation.Reference;import com.dubbo.service.TestService;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author test * @time 2019/8/27 15:58 * @description: * 调用dubbo */@RestControllerpublic class TestController { @Reference(version = "1.0.0") private TestService testServiceImpl; @RequestMapping("/insert") public String insert(){ testServiceImpl.insert(); return "insert 调用成功"; } @RequestMapping("/delete") public String delete(){ testServiceImpl.delete(); return "delete 调用成功"; } @RequestMapping("/update") public String update(){ testServiceImpl.update(); return "update 调用成功"; } @RequestMapping("/select") public String select(){ testServiceImpl.select(); return "select 调用成功"; }}
注意:TestController类中的代码结构使用服务注入时使用dubbo的@Reference注解。
启动类:
package com.dubbo.consumer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); }}
- 依次启动生产者项目,消费者项目(等生产者起来之后再启动,否则找不到服务)
刷新dubbo控台,可以看到生产者消费者显示正常。
生产者:
消费者:
接口服务:
- 接口调用测试
访问地址 http://localhost:8080/insert 结果如下:
服务调用日志:
踩坑:
java.lang.NoClassDefFoundError: org/apache/curator/framework/recipes/cache/TreeCacheListener
在pom文件中加入这两个依赖即可:
org.apache.curator curator-framework 4.0.1org.apache.curator curator-recipes 2.8.0
至此已经完成了dubbo的正常调用。
文章仅供学习参考,如有疑问欢迎评论交流!如果你对相关文章感兴趣,后续持续输出相关文章。
欢迎关注+转发+评论,获取源码私信我