SpringBoot+Dubbo整合

Bertha 。 2021-09-19 07:28 536阅读 0赞

此demo是SpringBoot中整合使用Dubbo,以及Mybaits;以达到分布式服务项目。

项目结构如下图:
在这里插入图片描述
分为三个项目,将service接口、service实现、web层分开。

  • springboot-dubbo-api
    在这里插入图片描述
    此项目为service接口层,主要放service接口、实体类、dto、枚举类、异常类等其它两个module中通用类和相关方法。
  • springboot-dubbo-service
    在这里插入图片描述
    此项目为具体的业务实现,包括具体的业务代码、Mybatis的mapper接口和sql语句。既为服务提供者(provider),service会注册为dubbo服务,使用zookeeper进行管理。
  • springboot-dubbo-web
    -在这里插入图片描述
    此项目和前端打交道,为前端输出数据。服务的消费者,需要注册为服务消费者(consumer),从zookeeper中获取已注册的服务。

具体实现
project 中pom文件配置

  1. <groupId>com.shuyu</groupId>
  2. <artifactId>springboot-dubbo</artifactId>
  3. <packaging>pom</packaging>
  4. <version>0.0.1-SNAPSHOT</version>
  5. <modules>
  6. <module>springboot-dubbo-api</module>
  7. <module>springboot-dubbo-service</module>
  8. <module>springboot-dubbo-web</module>
  9. </modules>
  10. <parent>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-parent</artifactId>
  13. <version>2.1.4.RELEASE</version>
  14. <relativePath/> <!-- lookup parent from repository -->
  15. </parent>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. <mysql-connector.version>6.0.6</mysql-connector.version>
  21. <commons.collections.version>3.2.1</commons.collections.version>
  22. </properties>
  23. <dependencyManagement>
  24. <dependencies>
  25. <!-- 数据库驱动 -->
  26. <dependency>
  27. <groupId>mysql</groupId>
  28. <artifactId>mysql-connector-java</artifactId>
  29. <version>5.1.25</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>commons-collections</groupId>
  33. <artifactId>commons-collections</artifactId>
  34. <version>${commons.collections.version}</version>
  35. </dependency>
  36. <!--dubbo start-->
  37. <dependency>
  38. <groupId>com.alibaba</groupId>
  39. <artifactId>dubbo</artifactId>
  40. <version>2.5.3</version>
  41. <exclusions>
  42. <exclusion>
  43. <groupId>org.springframework</groupId>
  44. <artifactId>spring</artifactId>
  45. </exclusion>
  46. </exclusions>
  47. </dependency>
  48. <dependency>
  49. <groupId>com.101tec</groupId>
  50. <artifactId>zkclient</artifactId>
  51. <version>0.8</version>
  52. <exclusions>
  53. <exclusion>
  54. <artifactId>activation</artifactId>
  55. <groupId>javax.activation</groupId>
  56. </exclusion>
  57. <exclusion>
  58. <artifactId>mail</artifactId>
  59. <groupId>javax.mail</groupId>
  60. </exclusion>
  61. <exclusion>
  62. <artifactId>slf4j-log4j12</artifactId>
  63. <groupId>org.slf4j</groupId>
  64. </exclusion>
  65. </exclusions>
  66. </dependency>
  67. <dependency>
  68. <groupId>org.apache.zookeeper</groupId>
  69. <artifactId>zookeeper</artifactId>
  70. <version>3.4.6</version>
  71. <exclusions>
  72. <exclusion>
  73. <artifactId>slf4j-log4j12</artifactId>
  74. <groupId>org.slf4j</groupId>
  75. </exclusion>
  76. </exclusions>
  77. </dependency>
  78. <!-- dubbo end -->
  79. </dependencies>
  80. </dependencyManagement>
  81. </project>
  • springboot-dubbo-api
    主要是service接口和实体对象,其中实体对象一定要实现Serializable接口,不然在注册dubbo服务时会报错。
    其次在pom.xml文件中,需要将此项目打包为jar文件,具体配置如下

    com.shuyu

    1. <artifactId>springboot-dubbo-api</artifactId>
    2. <version>0.0.1-SNAPSHOT</version>
    3. <name>springboot-dubbo-api</name>
    4. <description>Demo project for Spring Boot</description>
    5. <packaging>jar</packaging>
    6. <parent>
    7. <groupId>com.shuyu</groupId>
    8. <artifactId>springboot-dubbo</artifactId>
    9. <version>0.0.1-SNAPSHOT</version>
    10. </parent>
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.projectlombok</groupId>
  4. <artifactId>lombok</artifactId>
  5. <version>1.16.20</version>
  6. <scope>provided</scope>
  7. </dependency>
  8. </dependencies>
  9. </project>

在开发过程中,此项目代码有修改需要更新在maven仓库中,具体操作就是maven install

  • springboot-dubbo-service
    首先maven依赖,需要注意的时,要将springboot-dubbo-api项目依赖加进来。不然无法实现service接口和使用实体类。

    com.shuyu

    1. <artifactId>springboot-dubbo-service</artifactId>
    2. <version>0.0.1-SNAPSHOT</version>
    3. <name>springboot-dubbo-service</name>
    4. <description>Demo project for Spring Boot</description>
    5. <parent>
    6. <groupId>com.shuyu</groupId>
    7. <artifactId>springboot-dubbo</artifactId>
    8. <version>0.0.1-SNAPSHOT</version>
    9. </parent>
    10. <dependencies>
    11. <dependency>
    12. <groupId>org.springframework.boot</groupId>
    13. <artifactId>spring-boot-starter-web</artifactId>
    14. <exclusions>
    15. <exclusion>
    16. <groupId>org.slf4j</groupId>
    17. <artifactId>log4j-over-slf4j</artifactId>
    18. </exclusion>
    19. </exclusions>
    20. </dependency>
    21. <dependency>
    22. <groupId>org.projectlombok</groupId>
    23. <artifactId>lombok</artifactId>
    24. <optional>true</optional>
    25. </dependency>
    26. <dependency>
    27. <groupId>org.springframework.boot</groupId>
    28. <artifactId>spring-boot-starter-test</artifactId>
    29. <scope>test</scope>
    30. </dependency>
    31. <!-- log4j -->
    32. <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    33. <dependency>
    34. <groupId>log4j</groupId>
    35. <artifactId>log4j</artifactId>
    36. <version>1.2.17</version>
    37. </dependency>
  1. <!-- Spring Boot Dubbo 依赖 -->
  2. <dependency>
  3. <groupId>io.dubbo.springboot</groupId>
  4. <artifactId>spring-boot-starter-dubbo</artifactId>
  5. <version>1.0.0</version>
  6. <exclusions>
  7. <exclusion>
  8. <artifactId>javassist</artifactId>
  9. <groupId>org.javassist</groupId>
  10. </exclusion>
  11. </exclusions>
  12. </dependency>
  13. <!--服务接口-->
  14. <dependency>
  15. <groupId>com.shuyu</groupId>
  16. <artifactId>springboot-dubbo-api</artifactId>
  17. <version>0.0.1-SNAPSHOT</version>
  18. </dependency>
  19. <!--mybaits -->
  20. <dependency>
  21. <groupId>org.mybatis.spring.boot</groupId>
  22. <artifactId>mybatis-spring-boot-starter</artifactId>
  23. <version>1.3.0</version>
  24. </dependency>
  25. <!--ali druid-->
  26. <dependency>
  27. <groupId>com.alibaba</groupId>
  28. <artifactId>druid</artifactId>
  29. <version>1.0.18</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.javassist</groupId>
  33. <artifactId>javassist</artifactId>
  34. <version>3.25.0-GA</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>mysql</groupId>
  38. <artifactId>mysql-connector-java</artifactId>
  39. </dependency>
  40. <dependency>
  41. <groupId>commons-collections</groupId>
  42. <artifactId>commons-collections</artifactId>
  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>

关键java代码

  1. @Service(version = "1.0.0")
  2. @org.springframework.stereotype.Service
  3. @Slf4j
  4. public class UserServiceImpl implements UserService {
  5. @Autowired
  6. private UserMapper userMapper;
  7. @Override
  8. public List<UserDTO> listUser() {
  9. List<User> users = userMapper.listUser();
  10. log.info("users.size" + users.size());
  11. List<UserDTO> userDTOList = new ArrayList<>();
  12. userDTOList = users.stream().map(user -> {
  13. return new UserDTO(user.getUserName(), user.getUserCode());
  14. }).collect(Collectors.toList());
  15. return userDTOList;
  16. }
  17. }
  • springboot-dubbo-web
    pom配置


    com.shuyu
    springboot-dubbo
    0.0.1-SNAPSHOT
    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-web</artifactId>
    5. </dependency>
    6. <dependency>
    7. <groupId>org.projectlombok</groupId>
    8. <artifactId>lombok</artifactId>
    9. <optional>true</optional>
    10. </dependency>
    11. <dependency>
    12. <groupId>org.springframework.boot</groupId>
    13. <artifactId>spring-boot-starter-test</artifactId>
    14. <scope>test</scope>
    15. </dependency>
  1. <!-- log4j -->
  2. <!-- https://mvnrepository.com/artifact/log4j/log4j -->
  3. <dependency>
  4. <groupId>log4j</groupId>
  5. <artifactId>log4j</artifactId>
  6. <version>1.2.17</version>
  7. </dependency>
  8. <!-- Spring Boot Dubbo 依赖 -->
  9. <dependency>
  10. <groupId>io.dubbo.springboot</groupId>
  11. <artifactId>spring-boot-starter-dubbo</artifactId>
  12. <version>1.0.0</version>
  13. </dependency>
  14. <!--服务接口-->
  15. <dependency>
  16. <groupId>com.shuyu</groupId>
  17. <artifactId>springboot-dubbo-api</artifactId>
  18. <version>0.0.1-SNAPSHOT</version>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.javassist</groupId>
  22. <artifactId>javassist</artifactId>
  23. <version>3.25.0-GA</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>mysql</groupId>
  27. <artifactId>mysql-connector-java</artifactId>
  28. </dependency>
  29. </dependencies>
  30. <build>
  31. <plugins>
  32. <plugin>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-maven-plugin</artifactId>
  35. </plugin>
  36. </plugins>
  37. </build>

java核心代码

  1. RestController
  2. @RequestMapping("user")
  3. public class UserController {
  4. @Reference(version = "1.0.0")
  5. private UserService userService;
  6. @RequestMapping("hello")
  7. public List<UserDTO> hello() {
  8. List<UserDTO> userDTOList = userService.listUser();
  9. return userDTOList;
  10. }
  11. }

dubbo配置,由于加入的依赖是spring-boot-starter-dubbo,已经和springboot集成了,所以只需要在application.properties(或者appl.yml)文件中加入配置,如下:

Dubbo 服务提供者配置

spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.llf.springboot.dubbo
在上面配置中,zookeeper为本地启动的,需要事先安装启动,具体流程不再讲解。scan的包为接口实现的所在的包目录。

注意:在service实现类中加入是@Service注解要是dubbo的Service注解,com.alibaba.dubbo.config.annotation.Service;

dubbo服务配置,项目要对service服务进行消费,需要进行消费者配置。

Dubbo 服务消费者配置

spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.llf.springboot.dubbo
注意:在controller进行service注入时需要使用@Reference
com.alibaba.dubbo.config.annotation.Reference

使用
启动本地zookeeper
先启动springboot-dubbo-service项目,再启动springboot-dubbo-web,然后调用接口即可

项目源码:https://github.com/iot-wangshuyu/springboot-dubbo

发表评论

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

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

相关阅读

    相关 ssm整合

    在mybatis和spring整合后 , 在把springmvc整合进来 在maven里创建web工程 然后进行mybatis和spring的整合步骤(写在其他博客里)