SpringBoot整合dubbo(xml配置dubbo)

Love The Way You Lie 2022-01-05 04:41 453阅读 0赞

源码

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

准备

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-dubbo02

项目目录结构如下图:
在这里插入图片描述
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-dubbo02-api-web</module>
  8. <module>springboot-dubbo02-service-impl</module>
  9. <module>springboot-dubbo02-service</module>
  10. </modules>
  • 新建模块,命名为springboot-dubbo02–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-dubbo02-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>com.alibaba</groupId>
  36. <artifactId>dubbo</artifactId>
  37. <version>2.5.3</version>
  38. <exclusions>
  39. <exclusion>
  40. <groupId>org.springframework</groupId>
  41. <artifactId>spring</artifactId>
  42. </exclusion>
  43. </exclusions>
  44. </dependency>
  45. <!-- zookeeper -->
  46. <dependency>
  47. <groupId>org.apache.zookeeper</groupId>
  48. <artifactId>zookeeper</artifactId>
  49. <version>3.4.6</version>
  50. <exclusions>
  51. <exclusion>
  52. <groupId>org.slf4j</groupId>
  53. <artifactId>slf4j-log4j12</artifactId>
  54. </exclusion>
  55. <exclusion>
  56. <groupId>log4j</groupId>
  57. <artifactId>log4j</artifactId>
  58. </exclusion>
  59. </exclusions>
  60. </dependency>
  61. <dependency>
  62. <groupId>com.github.sgroschupf</groupId>
  63. <artifactId>zkclient</artifactId>
  64. <version>0.1</version>
  65. </dependency>
  66. <!-- 项目依赖 -->
  67. <dependency>
  68. <groupId>com.wyj</groupId>
  69. <artifactId>springboot-dubbo02-service</artifactId>
  70. <version>0.0.1-SNAPSHOT</version>
  71. </dependency>
  72. <!-- 日志 -->
  73. <dependency>
  74. <groupId>org.slf4j</groupId>
  75. <artifactId>slf4j-log4j12</artifactId>
  76. </dependency>
  77. </dependencies>
  78. <build>
  79. <finalName>springboot-dubbo02-service-impl</finalName>
  80. <plugins>
  81. <plugin>
  82. <groupId>org.springframework.boot</groupId>
  83. <artifactId>spring-boot-maven-plugin</artifactId>
  84. </plugin>
  85. </plugins>
  86. </build>

dubbo-provider.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  3. <!-- 提供方应用信息,用于计算依赖关系 -->
  4. <dubbo:application name="${dubbo.application.name}"/>
  5. <!-- 使用zookeeper注册中心暴露服务地址 -->
  6. <dubbo:registry id="register" address="${dubbo.registry.address}"/>
  7. <dubbo:registry id="local" address="zookeeper://127.0.0.1:2181"/>
  8. <!-- 用dubbo协议在20880端口暴露服务 -->
  9. <dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}"/>
  10. <!-- 声明需要暴露的服务接口(注意是接口,不是实现类) -->
  11. <!-- 这里是具体实现类,id和上面的暴露的服务接口ref要一致,dubbo就是通过这个来注册对应的服务 -->
  12. <!-- 同模块的registry使用local,不同模块的使用远程的register -->
  13. <dubbo:service registry="register" interface="com.wyj.service.DemoService" ref="demoService"/>
  14. <!-- 消费dubbo服务 -->
  15. <!--<dubbo:reference registry="register" interface="" id=""/>-->
  16. </beans>

DemoServiceImpl:

这个@Service是spring提供的注解

  1. @Service("demoService")
  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. dubbo.application.name=demo-provider
  5. spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
  6. dubbo.protocol.name=dubbo
  7. dubbo.protocol.port=20880
  8. # dataBase
  9. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  10. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot-dubbo02?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
  11. spring.datasource.username=root
  12. spring.datasource.password=root
  13. spring.datasource.max-idle=10
  14. spring.datasource.max-wait=10000
  15. spring.datasource.min-idle=5
  16. spring.datasource.initial-size=5
  17. # mybatis
  18. mybatis.mapper-locations=classpath:mapper/*.xml
  • 新建模块,命名为springboot-dubbo02-api-web

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

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

  1. <parent>
  2. <groupId>com.wyj</groupId>
  3. <artifactId>springboot-dubbo02</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>com.alibaba</groupId>
  29. <artifactId>dubbo</artifactId>
  30. <version>2.5.3</version>
  31. <exclusions>
  32. <exclusion>
  33. <groupId>org.springframework</groupId>
  34. <artifactId>spring</artifactId>
  35. </exclusion>
  36. </exclusions>
  37. </dependency>
  38. <!-- zookeeper -->
  39. <dependency>
  40. <groupId>org.apache.zookeeper</groupId>
  41. <artifactId>zookeeper</artifactId>
  42. <version>3.4.6</version>
  43. <exclusions>
  44. <exclusion>
  45. <groupId>org.slf4j</groupId>
  46. <artifactId>slf4j-log4j12</artifactId>
  47. </exclusion>
  48. <exclusion>
  49. <groupId>log4j</groupId>
  50. <artifactId>log4j</artifactId>
  51. </exclusion>
  52. </exclusions>
  53. </dependency>
  54. <dependency>
  55. <groupId>com.github.sgroschupf</groupId>
  56. <artifactId>zkclient</artifactId>
  57. <version>0.1</version>
  58. </dependency>
  59. <!-- 项目依赖 -->
  60. <dependency>
  61. <groupId>com.wyj</groupId>
  62. <artifactId>springboot-dubbo02-service</artifactId>
  63. <version>0.0.1-SNAPSHOT</version>
  64. </dependency>
  65. </dependencies>
  66. <build>
  67. <finalName>springboot-dubbo02-api-web</finalName>
  68. <plugins>
  69. <plugin>
  70. <groupId>org.springframework.boot</groupId>
  71. <artifactId>spring-boot-maven-plugin</artifactId>
  72. </plugin>
  73. </plugins>
  74. </build>

dubbo-consumer.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  3. <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  4. <dubbo:application name="${dubbo.application.name}"/>
  5. <dubbo:registry id="register" address="${dubbo.registry.address}"/>
  6. <dubbo:registry id="local" address="zookeeper://127.0.0.1:2181"/>
  7. <dubbo:protocol name="${dubbo.protocol.name}"/>
  8. <!-- 生成远程服务代理,可以和本地bean一样调用 -->
  9. <!-- 同模块的registry使用local,不同模块的使用远程的register -->
  10. <dubbo:reference registry="register" id="demoService" interface="com.wyj.service.DemoService"/>
  11. </beans>

DemoController:

  1. @RestController
  2. public class DemoController {
  3. @Autowired
  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. dubbo.application.name=demo-consumer
  5. dubbo.registry.address=zookeeper://127.0.0.1:2181
  6. dubbo.protocol.name=dubbo

测试

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

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

查看监控中心

  • 访问dubbo-admin

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

发表评论

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

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

相关阅读

    相关 springboot整合dubbo

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

    相关 SpringBoot整合dubbo

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