当前位置:   article > 正文

SpringCloud整合Dubbo

springcloud整合dubbo

通常来说,RPC协议比REST具有更好的性能。很多开发人员希望享受Spring Cloud的生态,同时有兼顾PRC的效率的效率。SpringCloud Alibaba很好的解决了这个问题。

1.为什么整合dubbo?

Feign基于Http协议(应用层),在高并发场景下性能不够理想,容易成为性能瓶颈, Dubbo框架的通信协议采用TCP协议(数据传输层)。

 Dubbo框架的通信协议采用RPC协议,属于传输层协议; Dubbo默认通过Netty构造TCP长连接的方式进行通信,性能较高; 使用SpringCloud整合Dubbo,即为强强联合。

2.springboot整合dubbo

通常来说,RPC协议比REST具有更好的性能。很多开发人员希望享受Spring Cloud的生态,同时有兼顾PRC的效率的效率。SpringCloud Alibaba很好的解决了这个问题。

2.1功能概述

将Dubbo集成至SpringCloud主要是替换Ribbo或者Feign实现远程调用。加入Dubbo后,整体的架构如下:

 2.2入门案例

1.定义接口模块dubbo-api,并将UserService接口抽取到此模块下。

  1. package cn.it.dubbo.api;
  2. import cn.it.dubbo.domain.User;
  3. public interface UserService {
  4. User queryById(Long id);
  5. }

2.项目依赖

父工程加入SpringCloud Alibaba依赖。

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  4. <version>2.2.5.RELEASE</version>
  5. <type>pom</type>
  6. <scope>import</scope>
  7. </dependency>

消费者和提供者引入nacos注册中心和Dubbo依赖。

  1. <!--nacos注册中心的依赖-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. </dependency>
  6. <!--springcloud alibaba dubbo依赖 -->
  7. <dependency>
  8. <groupId>com.alibaba.cloud</groupId>
  9. <artifactId>spring-cloud-starter-dubbo</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>cn.itcast</groupId>
  13. <artifactId>dubbo-api</artifactId>
  14. <version>1.0-SNAPSHOT</version>
  15. </dependency>

3.服务提供者

修改UserService实现UserApi接口。并使用@DubboService注解替换@Service对外暴露dubbo服务。

  1. package cn.it.user.service;
  2. import cn.it.dubbo.api.UserService;
  3. import cn.it.dubbo.domain.User;
  4. import cn.it.user.mapper.UserMapper;
  5. import org.apache.dubbo.config.annotation.DubboService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. @DubboService
  8. public class UserServiceImpl implements UserService {
  9. @Autowired
  10. private UserMapper userMapper;
  11. public User queryById(Long id) {
  12. return userMapper.findById(id);
  13. }
  14. }

在application.yml中添加配置

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
  4. username: root
  5. password: root
  6. driver-class-name: com.mysql.jdbc.Driver
  7. application:
  8. name: user-service
  9. cloud:
  10. nacos:
  11. discovery:
  12. server-addr: localhost:8848
  13. #配置dubbo,注册中心,暴露的端口和协议,dubbo注解的包扫描
  14. dubbo:
  15. protocol:
  16. name: dubbo
  17. port: 20881
  18. registry:
  19. address: spring-cloud://localhost #使用SpringCloud中的注册中心
  20. scan:
  21. base-packages: cn.itcast.user.service #dubbo中包扫描

4.服务消费者

在OrderController中引入dubbo服务。调用UserService查询用户

  1. package cn.it.order.controller;
  2. import cn.it.dubbo.api.UserService;
  3. import cn.it.dubbo.domain.Order;
  4. import cn.it.dubbo.domain.User;
  5. import cn.it.order.service.OrderService;
  6. import org.apache.dubbo.config.annotation.DubboReference;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.web.bind.annotation.GetMapping;
  9. import org.springframework.web.bind.annotation.PathVariable;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12. @RestController
  13. @RequestMapping("order")
  14. public class OrderController {
  15. @Autowired
  16. private OrderService orderService;
  17. @DubboReference
  18. private UserService userService;
  19. @GetMapping("{orderId}")
  20. public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
  21. //根据id查询订单
  22. Order order = orderService.queryOrderById(orderId);
  23. //获取用户id
  24. Long userId = order.getUserId();
  25. //查询用户
  26. User user = userService.queryById(userId);
  27. //设置用户对象
  28. order.setUser(user);
  29. // 根据id查询订单并返回
  30. return order;
  31. }
  32. }

在Order-service的模块中添加dubbo配置

  1. spring:
  2. application:
  3. name: order-service
  4. cloud:
  5. nacos:
  6. discovery:
  7. server-addr: localhost:8848
  8. #dubbo配置
  9. dubbo:
  10. registry:
  11. address: spring-cloud://localhost #使用cloud的注册中心
  12. consumer:
  13. check: false #dubbo默认有启动检查
  14. retries: 0 #dubbo内置的重试机制

至此,即完成springboot整合dubbo。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/851759?site
推荐阅读
相关标签
  

闽ICP备14008679号