Dubbo SpringBoot版本入门

蔚落 2022-10-28 10:29 93阅读 0赞

Dubbo SpringBoot版本入门

  • 1、目的
  • 2、方法
    • 2.1 系统工程总体介绍
    • 2.2 系统工程环境搭建
      • 2.2.1 新建`springboot-order-service-consumer`服务
      • 2.2.2 新建`springboot-user-service-provider`服务
      • 2.2.3 新建`springboot-common-service`服务
    • 2.3 填充内容
      • 2.3.1 `springboot-common-service`服务填充内容
      • 2.3.2 `springboot-order-service-consumer`服务填充内容
      • 2.3.3 `springboot-user-service-provider`服务填充内容
    • 2.4 测试
  • 3、总结

1、目的

  学习如何使用SpringBoot版本的Dubbo搭建一个简单的项目。这里笔者使用商城作为案例,一共有两个服务:订单服务、用户服务。其中用户服务是服务提供者,订单服务是服务消费者。实现的功能是订单服务调用用户服务实现用户收货地址的查询。

2、方法

  

2.1 系统工程总体介绍

   需要将系统服务进行拆分成springboot-order-service-consumer,springboot-user-service-provider,springboot-common-service。三个工程。其中springboot-order-service-consumer是订单服务,springboot-user-service-provider是用户服务,springboot-common-service是公共服务。

2.2 系统工程环境搭建

  首先新建一个空的Java工程。如下图所示,直接下一步直到完成,写好自己的工程名即可。

在这里插入图片描述

2.2.1 新建springboot-order-service-consumer服务

  首先新建一个module,如下图所示。

在这里插入图片描述

然后选择spring initializr选项,直接下一步即可。如下图所示。

在这里插入图片描述

修改包名及配置如下所示。

在这里插入图片描述

由于消费者本文将使用Web方式进行测试,这里选择了一个Spring Web

在这里插入图片描述

点击下一步,命名好工程,结果如下图所示。

在这里插入图片描述

2.2.2 新建springboot-user-service-provider服务

大体步骤同2.2.1,这里将贴出不同的地方截图,请读者自行理解。

Module参数配置如下图所示。

在这里插入图片描述

服务提供者我们不需要Web测试,所以这里不需要选择其他依赖。直接下一步即可。如下图所示。
在这里插入图片描述

新建好工程之后如下图所示。
在这里插入图片描述

2.2.3 新建springboot-common-service服务

新建公共服务,提供个服务的公共类。首先新建一个Maven工程。如下图所示。

在这里插入图片描述

定义好工程名,如下图所示。

在这里插入图片描述

新建好的工程结构如下图所示。

在这里插入图片描述

2.3 填充内容

2.3.1 springboot-common-service服务填充内容

首先在springboot-common-service工程内新建cn.edu.njust.gmall.common包名,效果如下图所示。

在这里插入图片描述

接着新建基本的BeanService接口,结构图如下所示。
在这里插入图片描述

UserAddress 用户地址Bean

  1. package cn.edu.njust.gmall.common.bean;
  2. import java.io.Serializable;
  3. /** * 用户地址 * */
  4. public class UserAddress implements Serializable {
  5. private Integer id;
  6. private String userAddress; //用户地址
  7. private String userId; //用户id
  8. private String consignee; //收货人
  9. private String phoneNum; //电话号码
  10. private String isDefault; //是否为默认地址 Y-是 N-否
  11. public UserAddress() {
  12. super();
  13. // TODO Auto-generated constructor stub
  14. }
  15. public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum,
  16. String isDefault) {
  17. super();
  18. this.id = id;
  19. this.userAddress = userAddress;
  20. this.userId = userId;
  21. this.consignee = consignee;
  22. this.phoneNum = phoneNum;
  23. this.isDefault = isDefault;
  24. }
  25. public Integer getId() {
  26. return id;
  27. }
  28. public void setId(Integer id) {
  29. this.id = id;
  30. }
  31. public String getUserAddress() {
  32. return userAddress;
  33. }
  34. public void setUserAddress(String userAddress) {
  35. this.userAddress = userAddress;
  36. }
  37. public String getUserId() {
  38. return userId;
  39. }
  40. public void setUserId(String userId) {
  41. this.userId = userId;
  42. }
  43. public String getConsignee() {
  44. return consignee;
  45. }
  46. public void setConsignee(String consignee) {
  47. this.consignee = consignee;
  48. }
  49. public String getPhoneNum() {
  50. return phoneNum;
  51. }
  52. public void setPhoneNum(String phoneNum) {
  53. this.phoneNum = phoneNum;
  54. }
  55. public String getIsDefault() {
  56. return isDefault;
  57. }
  58. public void setIsDefault(String isDefault) {
  59. this.isDefault = isDefault;
  60. }
  61. }

OrderService 订单服务接口

  1. package cn.edu.njust.gmall.common.service;
  2. import cn.edu.njust.gmall.common.bean.UserAddress;
  3. import java.util.List;
  4. public interface OrderService {
  5. /** * 初始化订单 * @param userId * @return */
  6. List<UserAddress> initOrder(String userId);
  7. }

UserService 用户服务接口

  1. package cn.edu.njust.gmall.service;
  2. import cn.edu.njust.gmall.bean.UserAddress;
  3. import java.util.List;
  4. public interface UserService {
  5. /** * 根据用户id返回所有的收货地址 * * @param userId * @return */
  6. List<UserAddress> getUserAddressList(String userId);
  7. }

然后在springboot-order-service-consumer,springboot-user-service-provider服务中引入公共依赖和Dubbo依赖。

2.3.2 springboot-order-service-consumer服务填充内容

首先工程总体结构如下图所示。

在这里插入图片描述

InitController 初始化订单Controller类

  1. package cn.edu.njust.gmall.order.controller;
  2. import cn.edu.njust.gmall.common.bean.UserAddress;
  3. import cn.edu.njust.gmall.common.service.OrderService;
  4. import org.apache.dubbo.config.annotation.DubboReference;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestParam;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. import java.util.List;
  10. @Controller
  11. public class InitController {
  12. // Dubbo的2.7.7版本中已经标注了Reference和Service注解为@Deprecated弃用了。
  13. // 改用DubboReference和DubboService这两个注解了
  14. @DubboReference
  15. OrderService orderService;
  16. @ResponseBody
  17. @RequestMapping("/initOrder")
  18. public List<UserAddress> initOrder(@RequestParam("uid") String userId) {
  19. return orderService.initOrder(userId);
  20. }
  21. }

OrderServiceImpl

  1. package cn.edu.njust.gmall.order.service.impl;
  2. import cn.edu.njust.gmall.common.bean.UserAddress;
  3. import cn.edu.njust.gmall.common.service.OrderService;
  4. import cn.edu.njust.gmall.common.service.UserService;
  5. import org.apache.dubbo.config.annotation.DubboReference;
  6. import org.apache.dubbo.config.annotation.DubboService;
  7. import org.springframework.stereotype.Service;
  8. import java.util.List;
  9. @DubboService
  10. @Service
  11. public class OrderServiceImpl implements OrderService {
  12. @DubboReference
  13. UserService userService;
  14. public List<UserAddress> initOrder(String userId) {
  15. return userService.getUserAddressList(userId);
  16. }
  17. }

OrderApplication

  1. package cn.edu.njust.gmall.order;
  2. import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @EnableDubbo
  6. @SpringBootApplication
  7. public class OrderApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(OrderApplication.class, args);
  10. }
  11. }

application

  1. server.port=8085
  2. dubbo.application.name=springboot-order-service-consumer
  3. dubbo.registry.address=zookeeper://127.0.0.1:2181
  4. dubbo.monitor.protocol=registry

pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-parent</artifactId>
  7. <version>2.4.2</version>
  8. <relativePath/> <!-- lookup parent from repository -->
  9. </parent>
  10. <groupId>cn.edu.njust.gmall</groupId>
  11. <artifactId>order</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>order</name>
  14. <description>订单服务-消费者</description>
  15. <properties>
  16. <java.version>1.8</java.version>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-test</artifactId>
  26. <scope>test</scope>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.example</groupId>
  30. <artifactId>springboot-common-service</artifactId>
  31. <version>1.0-SNAPSHOT</version>
  32. </dependency>
  33. <!-- Dubbo Spring Boot Starter -->
  34. <dependency>
  35. <groupId>org.apache.dubbo</groupId>
  36. <artifactId>dubbo-spring-boot-starter</artifactId>
  37. <version>2.7.8</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.apache.curator</groupId>
  41. <artifactId>curator-recipes</artifactId>
  42. <version>2.13.0</version>
  43. </dependency>
  44. </dependencies>
  45. <build>
  46. <plugins>
  47. <plugin>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-maven-plugin</artifactId>
  50. </plugin>
  51. </plugins>
  52. </build>
  53. </project>

2.3.3 springboot-user-service-provider服务填充内容

首先工程总体结构如下图所示。
在这里插入图片描述

UserServiceImpl

  1. package cn.edu.njust.gmall.user.service.impl;
  2. import cn.edu.njust.gmall.common.bean.UserAddress;
  3. import cn.edu.njust.gmall.common.service.UserService;
  4. import org.apache.dubbo.config.annotation.DubboService;
  5. import org.springframework.stereotype.Service;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. @DubboService
  9. @Service
  10. public class UserServiceImpl implements UserService {
  11. public List<UserAddress> getUserAddressList(String userId) {
  12. ArrayList<UserAddress> userAddresses = new ArrayList<UserAddress>();
  13. for (int i = 0; i < 10; i++) {
  14. UserAddress userAddress = new UserAddress(i, "userAdderss_" + i, "userId_" + i,
  15. "consignee_" + i, "phoneNum_" + i, "isDefault_" + i);
  16. userAddresses.add(userAddress);
  17. }
  18. System.out.println(userAddresses);
  19. return userAddresses;
  20. }
  21. }

UserApplication

  1. package cn.edu.njust.gmall.user;
  2. import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @EnableDubbo
  6. @SpringBootApplication
  7. public class UserApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(UserApplication.class, args);
  10. }
  11. }

application

  1. server.port=8086
  2. dubbo.application.name=user-service-provider
  3. dubbo.registry.address=127.0.0.1:2181
  4. dubbo.registry.protocol=zookeeper
  5. dubbo.protocol.name=dubbo
  6. dubbo.protocol.port=20881
  7. dubbo.monitor.protocol=registry

pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-parent</artifactId>
  7. <version>2.4.2</version>
  8. <relativePath/> <!-- lookup parent from repository -->
  9. </parent>
  10. <groupId>cn.edu.njust.gmall</groupId>
  11. <artifactId>user</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>user</name>
  14. <description>用户服务-提供者</description>
  15. <properties>
  16. <java.version>1.8</java.version>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-test</artifactId>
  26. <scope>test</scope>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.example</groupId>
  30. <artifactId>springboot-common-service</artifactId>
  31. <version>1.0-SNAPSHOT</version>
  32. </dependency>
  33. <!-- Dubbo Spring Boot Starter -->
  34. <dependency>
  35. <groupId>org.apache.dubbo</groupId>
  36. <artifactId>dubbo-spring-boot-starter</artifactId>
  37. <version>2.7.8</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.apache.curator</groupId>
  41. <artifactId>curator-recipes</artifactId>
  42. <version>2.13.0</version>
  43. </dependency>
  44. </dependencies>
  45. <build>
  46. <plugins>
  47. <plugin>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-maven-plugin</artifactId>
  50. </plugin>
  51. </plugins>
  52. </build>
  53. </project>

以上则建立好全部工程。启动服务。

2.4 测试

这里还需要启动zookeeper作为注册中心。然后启动两个服务即可。效果图如下。
在这里插入图片描述

然后访问http://localhost:8085/initOrder?uid=1即可。
效果图如下。

在这里插入图片描述

说明服务成功启动。Dubbo服务成功搭建起来了。

有点菜,有时间再优化一下。

3、总结

  书上的代码直接运行绝大部分是对的,但是总有一些软件的更新使得作者无能为力。之前的API是对的,但是之后就废弃了或修改了是常有的事。所以我们需要跟踪源代码。这只是一个小小的问题,如果没有前辈的无私奉献,很难想象我们自己一天能学到多少内容。感谢各位前辈的辛勤付出,让我们少走了很多的弯路!

点个赞再走呗!欢迎留言哦!

发表评论

表情:
评论列表 (有 0 条评论,93人围观)

还没有评论,来说两句吧...

相关阅读