dubbo与springboot的集成和使用dubbo-spring-boot-starter

dubbo最近更新了dubbo-spring-boot-starter的jar包,废话不多少,看看如何使用。

首先我们可以通过github编译打包最新的starter,

Git地址为:https://github.com/alibaba/dubbo-spring-boot-starter.git

在springboot项目的pom.xml中新增,添加maven的依赖。

  1. <!--dubbo-springBoot依赖-->
  2. <dependency>
  3. <groupId>com.alibaba.spring.boot </groupId>
  4. <artifactId>dubbo-spring-boot-starter </artifactId>
  5. <version>2.0.1-SNAPSHOT </version>
  6. </dependency>

可以新建一个springboot-dubbo-api工程,用来做接口定义,方便provider和consumer端使用,避免重复编码

接口定义示例:

  1. import com.xq.live.dubbo.common.BaseResp;
  2. import com.xq.live.dubbo.common.Pager;
  3. import com.xq.live.dubbo.model.Shop;
  4. import com.xq.live.dubbo.service.BaseSerivce;
  5. import com.xq.live.dubbo.vo.ShopInVo;
  6. /**
  7. * @package: com.xq.live.dubbo.api
  8. * @description: 商家接口定义
  9. * @author: zhangpeng32
  10. * @date: 2018/3/25 12:18
  11. * @version: 1.0
  12. */
  13. public interface ShopApi extends BaseSerivce <Shop>{
  14. /**
  15. * 分页查询
  16. * @param shopInVo
  17. * @return
  18. */
  19. public BaseResp <Pager<Shop>> queryWithPg(ShopInVo shopInVo);
  20. }

在这里我定义了一个BaseService,用来定义一些通用的接口方法,包含了简单的增删改查,也可以把分页的方法写在里面。

  1. /**
  2. * @package: com.xq.live.dubbo.common
  3. * @description: 基础接口类
  4. * @author: zhangpeng32
  5. * @date: 2018/3/25 12:27
  6. * @version: 1.0
  7. */
  8. public interface BaseSerivce <T> {
  9. /**
  10. * 新增记录
  11. * @param t
  12. * @return
  13. */
  14. public BaseResp <Long> create(T t);
  15. /**
  16. * 根据主键删除
  17. * @param pk
  18. * @return
  19. */
  20. public BaseResp <Integer> delete(Long pk);
  21. /**
  22. * 根据主键更新记录
  23. * @param t
  24. * @return
  25. */
  26. public BaseResp <Integer> update(T t);
  27. /**
  28. * 根据主键查询
  29. * @param pk
  30. * @return
  31. */
  32. public BaseResp <T> get(Long pk);
  33. }

在springboot-dubbo-provider项目中,首先做好dubbo和springboot的集成配置:

  1. ## dubbo springboot 配置
  2. spring.dubbo.application.id=live-dubbo-provider
  3. spring.dubbo.application.name=live-dubbo-provider
  4. spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
  5. spring.dubbo.server=true
  6. spring.dubbo.protocol.name=dubbo
  7. spring.dubbo.protocol.port=20880

在springboot的启动类添加@EnableDubboConfiguration注解:

  1. @MapperScan( "com.xq.live.dubbo.dao")
  2. @EnableDubboConfiguration
  3. @SpringBootApplication
  4. public class DubboServerApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(DubboServerApplication.class, args);
  7. }
  8. }

ShopApi接口实现类,示例如下:

  1. import com.alibaba.dubbo.config.annotation.Service;
  2. import com.xq.live.dubbo.api.ShopApi;
  3. import com.xq.live.dubbo.common.BaseResp;
  4. import com.xq.live.dubbo.common.Pager;
  5. import com.xq.live.dubbo.common.ResultEnums;
  6. import com.xq.live.dubbo.dao.ShopDao;
  7. import com.xq.live.dubbo.model.Shop;
  8. import com.xq.live.dubbo.vo.ShopInVo;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Component;
  11. /**
  12. * @package: com.xq.live.dubbo.handler
  13. * @description: 商家dubbo服务实现类
  14. * @author: zhangpeng32
  15. * @date: 2018/3/25 12:40
  16. * @version: 1.0
  17. */
  18. @Service(interfaceClass = ShopApi.class)
  19. @Component
  20. public class ShopHandler implements ShopApi {
  21. @Autowired
  22. private ShopDao shopDao;
  23. @Override
  24. public BaseResp<Long> create(Shop shop) {
  25. return null;
  26. }
  27. @Override
  28. public BaseResp<Integer> delete(Long pk) {
  29. return null;
  30. }
  31. @Override
  32. public BaseResp<Integer> update(Shop shop) {
  33. return null;
  34. }
  35. @Override
  36. public BaseResp<Shop> get(Long pk) {
  37. Shop shop = shopDao.selectByPrimaryKey(pk);
  38. return new BaseResp<Shop>(ResultEnums.SUCCESS, shop);
  39. }
  40. @Override
  41. public BaseResp<Pager<Shop>> queryWithPg(ShopInVo shopInVo) {
  42. return null;
  43. }
  44. }

启动本地的zookeeper: 在 \zookeeper-3.4.11\bin目录下执行zkServer.bat,启动zookeeper。

启动dubbo-admin可以用户查看服务注册情况以及权重调整等。

源码可以在这里获取:https://github.com/alibaba/dubbo.git

启动后界面如下:


启动springboot-dubbo-provider应用,可以通过dubbo-admin看到服务注册成功。


消费端

消费端application.properties配置为:

  1. ## 避免和 server 工程端口冲突
  2. server.port=8081
  3. ## Dubbo 服务消费者配置
  4. spring.dubbo.application.name=live-dubbo-consumer
  5. spring.dubbo.application.id=live-dubbo-consumer
  6. spring.dubbo.protocol.port=20800
  7. spring.dubbo.protocol.name=dubbo
  8. spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
接口实例化和调用示例:
  1. import com.alibaba.dubbo.config.annotation.Reference;
  2. import com.xq.live.dubbo.api.ShopApi;
  3. import com.xq.live.dubbo.common.BaseResp;
  4. import com.xq.live.dubbo.model.Shop;
  5. import org.springframework.stereotype.Component;
  6. /**
  7. * @package: com.xq.live.dubbo.service
  8. * @description: TODO
  9. * @author: zhangpeng32
  10. * @date: 2018/3/25 12:58
  11. * @version: 1.0
  12. */
  13. @Component
  14. public class ShopDubboService {
  15. @Reference
  16. private ShopApi shopApi;
  17. public BaseResp<Shop> get(Long id){
  18. return shopApi.get(id);
  19. }
  20. }

下面是消费端的springboot启动类配置:

  1. import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
  2. import com.xq.live.dubbo.common.BaseResp;
  3. import com.xq.live.dubbo.model.Shop;
  4. import com.xq.live.dubbo.service.ShopDubboService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.SpringApplication;
  7. import org.springframework.boot.autoconfigure.SpringBootApplication;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. @SpringBootApplication
  11. @RestController
  12. @EnableDubboConfiguration
  13. public class DubboClientApplication {
  14. @Autowired
  15. private ShopDubboService shopDubboService;
  16. public static void main(String[] args) {
  17. SpringApplication.run(DubboClientApplication.class, args);
  18. }
  19. @RequestMapping(value = "/")
  20. public String hello(){
  21. BaseResp<Shop> baseResp = shopDubboService.get( 1L);
  22. return "hello "+ baseResp.getCode()+ ": NAME : "+baseResp.getData().getShopName();
  23. }
  24. }

启动消费端,我这里使用的端口是8081,服务器采用的springboot内置的tomcat.启动后可以在dubbo-admin看到消费端注册成功。


总结:

1、dubbo和springboot的结合非常简单,引入dubbo的starter即可。

2、application.properties配置清晰简单,各配置都非常完整。

3、本示例中用到的各种工具类可以忽略,我只是为了统一返回需要做的一个定义。

4、目前没遇到什么问题,如果有,可以发消息我一起探讨。

猜你喜欢

转载自blog.csdn.net/markarch/article/details/81017503