SpringBoot整合dubbo(注解配置dubbo)

爱被打了一巴掌 2022-01-05 04:23 468阅读 0赞

源码

GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-dubbo01

准备

1、在服务器或者本地搭建好zookeeper,具体可参考文章:https://blog.csdn.net/qq\_35620501/article/details/87519306
2、在服务器或者本地搭建好dubbo-admin,具体可参考文章:https://blog.csdn.net/qq\_35620501/article/details/89037354

代码

  • 新建空的maven工程,命名为springboot-dubbo01

项目目录结构如下图:
在这里插入图片描述
pom.xml:

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.0.0.RELEASE</version>
  5. </parent>
  6. <modules>
  7. <module>springboot-dubbo01-api-web</module>
  8. <module>springboot-dubbo01-service-impl</module>
  9. <module>springboot-dubbo01-service</module>
  10. </modules>
  • 新建模块,命名为springboot-dubbo01–service

service主要是用来存放在实体类、Enum、工具类、service等

项目结构如下图:
在这里插入图片描述
DemoService:

  1. public interface DemoService {
  2. public List<Message> findMessage();
  3. }

Message:

  1. public class Message implements Serializable {
  2. private int id;
  3. private String city;
  4. private String time;
  5. private String weather;
  6. public Message() { }
  7. public int getId() { return id;}
  8. public void setId(int id) { this.id = id;}
  9. public String getCity() { return city;}
  10. public void setCity(String city) { this.city = city;}
  11. public String getTime() { return time;}
  12. public void setTime(String time) { this.time = time;}
  13. public String getWeather() { return weather;}
  14. public void setWeather(String weather) { this.weather = weather;}
  15. }

ApiResponse:

  1. public class ApiResponse implements Serializable {
  2. private int code;
  3. private String msg;
  4. private Object data;
  5. public ApiResponse() { }
  6. public ApiResponse(int code, String msg) {
  7. this.code = code;
  8. this.msg = msg;
  9. }
  10. public ApiResponse(int code, String msg, Object data) {
  11. this.code = code;
  12. this.msg = msg;
  13. this.data = data;
  14. }
  15. public int getCode() { return code;}
  16. public void setCode(int code) { this.code = code;}
  17. public String getMsg() { return msg;}
  18. public void setMsg(String msg) { this.msg = msg;}
  19. public Object getData() { return data;}
  20. public void setData(Object data) { this.data = data;}
  21. }
  • 新建模块,命名为springboot-dubbo01-service-impl

service-impl主要是存放service接口实现类、持久层的实现

项目结构如下图:
在这里插入图片描述
pom.xml:

  1. <parent>
  2. <groupId>com.wyj</groupId>
  3. <artifactId>springboot-dubbo01</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </parent>
  6. <dependencies>
  7. <!-- mybatis -->
  8. <dependency>
  9. <groupId>org.mybatis.spring.boot</groupId>
  10. <artifactId>mybatis-spring-boot-starter</artifactId>
  11. <version>2.0.1</version>
  12. </dependency>
  13. <!-- mysql -->
  14. <dependency>
  15. <groupId>mysql</groupId>
  16. <artifactId>mysql-connector-java</artifactId>
  17. <scope>runtime</scope>
  18. </dependency>
  19. <!-- springboot -->
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-test</artifactId>
  23. <scope>test</scope>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-web</artifactId>
  32. </dependency>
  33. <!-- dubbo -->
  34. <dependency>
  35. <groupId>io.dubbo.springboot</groupId>
  36. <artifactId>spring-boot-starter-dubbo</artifactId>
  37. <version>1.0.0</version>
  38. </dependency>
  39. <!-- 项目依赖 -->
  40. <dependency>
  41. <groupId>com.wyj</groupId>
  42. <artifactId>springboot-dubbo01-service</artifactId>
  43. <version>0.0.1-SNAPSHOT</version>
  44. </dependency>
  45. <!-- 日志 -->
  46. <dependency>
  47. <groupId>org.slf4j</groupId>
  48. <artifactId>slf4j-api</artifactId>
  49. <version>1.7.25</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>org.slf4j</groupId>
  53. <artifactId>log4j-over-slf4j</artifactId>
  54. </dependency>
  55. </dependencies>
  56. <build>
  57. <finalName>springboot-dubbo01-service-impl</finalName>
  58. <plugins>
  59. <plugin>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-maven-plugin</artifactId>
  62. </plugin>
  63. </plugins>
  64. </build>

DemoServiceImpl:

  1. @Service(timeout = 6000)//这个service是dubbo的service
  2. public class DemoServiceImpl implements DemoService {
  3. @Autowired
  4. private DemoMapper demoMapper;
  5. @Override
  6. public List<Message> findMessage() {
  7. return demoMapper.findMessage();
  8. }
  9. }

DemoMapper:

  1. public interface DemoMapper {
  2. public List<Message> findMessage();
  3. }

DemoMappe.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="com.wyj.mapper.DemoMapper">
  4. <select id="findMessage" resultType="com.wyj.entity.po.Message">
  5. select * from message
  6. </select>
  7. </mapper>

application.properties:

  1. # tomcat
  2. server.port=8081
  3. # dubbo
  4. spring.dubbo.application.name=demo-provider
  5. spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
  6. spring.dubbo.protocol.name=dubbo
  7. spring.dubbo.protocol.port=20880
  8. spring.dubbo.scan=com.wyj.service.impl
  9. # dataBase
  10. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  11. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot-dubbo01?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
  12. spring.datasource.username=root
  13. spring.datasource.password=root
  14. spring.datasource.max-idle=10
  15. spring.datasource.max-wait=10000
  16. spring.datasource.min-idle=5
  17. spring.datasource.initial-size=5
  18. # mybatis
  19. mybatis.mapper-locations=classpath:mapper/*.xml
  • 新建模块,命名为springboot-dubbo01-api-web

api主要是用来存放controller、handler、interceptor

项目结构如下图:
在这里插入图片描述
pom.xml:

  1. <parent>
  2. <groupId>com.wyj</groupId>
  3. <artifactId>springboot-dubbo01</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </parent>
  6. <dependencies>
  7. <!-- thymeleaf -->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  11. </dependency>
  12. <!-- springboor-->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-web</artifactId>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-test</artifactId>
  24. <scope>test</scope>
  25. </dependency>
  26. <!-- dubbo -->
  27. <dependency>
  28. <groupId>io.dubbo.springboot</groupId>
  29. <artifactId>spring-boot-starter-dubbo</artifactId>
  30. <version>1.0.0</version>
  31. </dependency>
  32. <!-- 项目依赖,去除springboot整合mybatis的jar包原因是该jar包中会自动注入sqlsession,需要在api层配置DataSource相关参数 -->
  33. <dependency>
  34. <groupId>com.wyj</groupId>
  35. <artifactId>springboot-dubbo01-service-impl</artifactId>
  36. <version>0.0.1-SNAPSHOT</version>
  37. <exclusions>
  38. <exclusion>
  39. <groupId>org.mybatis.spring.boot</groupId>
  40. <artifactId>mybatis-spring-boot-starter</artifactId>
  41. </exclusion>
  42. <exclusion>
  43. <groupId>mysql</groupId>
  44. <artifactId>mysql-connector-java</artifactId>
  45. </exclusion>
  46. </exclusions>
  47. </dependency>
  48. </dependencies>
  49. <build>
  50. <finalName>springboot-dubbo01-api-web</finalName>
  51. <plugins>
  52. <plugin>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-maven-plugin</artifactId>
  55. </plugin>
  56. </plugins>
  57. </build>

DemoController:

注意:

这里不能使用@Autowired注入bean,要使用dubbo中的注解@Reference注入bean和dubbo接口

  1. @RestController
  2. public class DemoController {
  3. @Reference
  4. private DemoService demoService;
  5. @RequestMapping(value = "/query")
  6. public ApiResponse demo() {
  7. try {
  8. List<Message> messageList = demoService.findMessage();
  9. return new ApiResponse(200, "操作成功", messageList);
  10. } catch (Exception e) {
  11. e.printStackTrace();
  12. return new ApiResponse(500, "系统异常");
  13. }
  14. }
  15. }

application.properties:

  1. # tomcat
  2. server.port=8080
  3. # dubbo
  4. spring.dubbo.application.name=demo-consumer
  5. spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
  6. spring.dubbo.scan=com.wyj.controller

测试

  • 先运行service-impl的服务,再启动api的服务,原则上是先启动service-impl的
  • 访问

浏览器访问:http://127.0.0.1:8080/query
在这里插入图片描述

查看监控中心

  • 访问dubbo-admin

在这里插入图片描述
点击服务治理中的服务
在这里插入图片描述
从监控中心可以看到com.wyj.service.DemoService这个接口能够正常注册到zookeeper中,并被api给消费

发表评论

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

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

相关阅读

    相关 springboot整合dubbo

    本文主要通过代码示例来说明springboot和dubbo的整合方式 以下是核心代码示例,其他的资源整合配置和spring+Dubbo相同 声明下:dubbo网址在下面配

    相关 SpringBoot整合dubbo

    1.什么是Dubbo Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服