Dubbo 介绍及入门实战

淡淡的烟草味﹌ 2022-12-06 12:53 325阅读 0赞

前言

在java项目中,很多更加大型的项目其实已经采用springCloud 了。很多中小型项目其实我们很多项目并不需要这么多模块,将项目拆分为过多的模块,dubbo仍然有适合自己一些场景。在自己从头搭建一套项目的时候,有时候没有一套dubbo 模板导致刚刚搭建的时候就耗费挺多时间。这里将一套模板springboot + dubbo 模板贴出来,提高从头搭建项目的速率。

Dubbo 简单介绍

在这里插入图片描述

dubbo调用的整体的流程:
首先服务提供者 Provider 启动然后向注册中心注册自己所能提供的服务。
服务消费者 Consumer 启动向注册中心订阅自己所需的服务。然后注册中心将提供者元信息通知给 Consumer, 之后 Consumer 因为已经从注册中心获取提供者的地址,因此可以通过负载均衡选择一个 Provider 直接调用 。之后服务提供方元数据变更的话注册中心会把变更推送给服务消费者。
服务提供者和消费者都会在内存中记录着调用的次数和时间,然后定时的发送统计数据到监控中心。

Dubbo 入门实战

一、构建三个模块
在这里插入图片描述

二、common 的一些内容
1、在common模块构建dubbo模块间调用的接口(各个模块都会用到常量、返回类型这里主要演示dubo故值定义dubbo模块间调用的接口)

  1. public interface ProviderService {
  2. String getProviderData(String data);
  3. }

三、provider构建内容

3.1 构建maven依赖(common的依赖、和dubbo所需要maven包)

  1. <properties>
  2. <java.version>11</java.version>
  3. <dubbo.version>2.7.1</dubbo.version>
  4. </properties>
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-web</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>com.yin</groupId>
  12. <artifactId>common</artifactId>
  13. <version>1.0-SNAPSHOT</version>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-test</artifactId>
  18. <scope>test</scope>
  19. <exclusions>
  20. <exclusion>
  21. <groupId>org.junit.vintage</groupId>
  22. <artifactId>junit-vintage-engine</artifactId>
  23. </exclusion>
  24. </exclusions>
  25. </dependency>
  26. <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-dependencies-zookeeper -->
  27. <dependency>
  28. <groupId>org.apache.dubbo</groupId>
  29. <artifactId>dubbo-dependencies-zookeeper</artifactId>
  30. <version>${dubbo.version}</version>
  31. <type>pom</type>
  32. <exclusions>
  33. <exclusion>
  34. <groupId>log4j</groupId>
  35. <artifactId>log4j</artifactId>
  36. </exclusion>
  37. <exclusion>
  38. <groupId>org.slfj</groupId>
  39. <artifactId>slf4j-log4j12</artifactId>
  40. </exclusion>
  41. </exclusions>
  42. </dependency>
  43. <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
  44. <dependency>
  45. <groupId>org.apache.dubbo</groupId>
  46. <artifactId>dubbo-spring-boot-starter</artifactId>
  47. <version>${dubbo.version}</version>
  48. </dependency>
  49. <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
  50. <dependency>
  51. <groupId>org.apache.dubbo</groupId>
  52. <artifactId>dubbo</artifactId>
  53. <version>${dubbo.version}</version>
  54. </dependency>
  55. </dependencies>

3.2 构建provider 的application.properties 文件

  1. server.port=9090
  2. dubbo.application.name=dubbo-provider
  3. dubbo.registry.protocol=zookeeper
  4. dubbo.registry.address=zookeeper://192.168.25.128:2181
  5. dubbo.protocol.name=dubbo
  6. dubbo.provider.timeout=30000
  7. #这里需要注意,我们很多项目可能会引入多个dubbo调用者,group 需要把group 放到代码
  8. dubbo.provider.group=dev
  9. dubbo.protocol.port=20880
  10. dubbo.config-center.timeout=50000
  11. dubbo.registry.timeout=4000
  12. #部分dubbo 版本注册默认,非动态注册(导致在zookeeper注册的永久节点)
  13. dubbo.provider.dynamic=true
  14. dubbo.service.version=1.0.0

3.3 构建provider 在启动内上添加扫描目录

  1. @SpringBootApplication
  2. @EnableDubbo(scanBasePackages = {"com.yin.dubboprovider.provider"})
  3. public class DubboProviderApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(DubboProviderApplication.class, args);
  6. }
  7. }

3、4 启动类上添加注册版本号(其余信息都交由自动加载配置文件内容)

  1. @Service(version = "${dubbo.service.version}")
  2. public class ProviderServiceImpl implements ProviderService {
  3. @Override
  4. public String getProviderData(String data) {
  5. return "get provider data is"+data;
  6. }
  7. }

四、consumer构建内容

4.1 构建maven依赖(common的依赖、和dubbo所需要maven包)

  1. <properties>
  2. <java.version>11</java.version>
  3. <dubbo.version>2.7.1</dubbo.version>
  4. </properties>
  5. <dependencies>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-web</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>com.yin</groupId>
  12. <artifactId>common</artifactId>
  13. <version>1.0-SNAPSHOT</version>
  14. </dependency>
  15. <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-dependencies-zookeeper -->
  16. <dependency>
  17. <groupId>org.apache.dubbo</groupId>
  18. <artifactId>dubbo-dependencies-zookeeper</artifactId>
  19. <version>${dubbo.version}</version>
  20. <type>pom</type>
  21. <exclusions>
  22. <exclusion>
  23. <groupId>log4j</groupId>
  24. <artifactId>log4j</artifactId>
  25. </exclusion>
  26. <exclusion>
  27. <groupId>org.slfj</groupId>
  28. <artifactId>slf4j-log4j12</artifactId>
  29. </exclusion>
  30. </exclusions>
  31. </dependency>
  32. <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
  33. <dependency>
  34. <groupId>org.apache.dubbo</groupId>
  35. <artifactId>dubbo-spring-boot-starter</artifactId>
  36. <version>${dubbo.version}</version>
  37. </dependency>
  38. <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
  39. <dependency>
  40. <groupId>org.apache.dubbo</groupId>
  41. <artifactId>dubbo</artifactId>
  42. <version>${dubbo.version}</version>
  43. </dependency>
  44. <dependency>
  45. <groupId>org.springframework.boot</groupId>
  46. <artifactId>spring-boot-starter-test</artifactId>
  47. <scope>test</scope>
  48. <exclusions>
  49. <exclusion>
  50. <groupId>org.junit.vintage</groupId>
  51. <artifactId>junit-vintage-engine</artifactId>
  52. </exclusion>
  53. </exclusions>
  54. </dependency>
  55. </dependencies>

4.2 构建provider 的application.properties 文件

  1. server.port=9091
  2. dubbo.application.name=dubbo-consumer
  3. dubbo.registry.protocol=zookeeper
  4. dubbo.registry.address=zookeeper://192.168.25.128:2181
  5. dubbo.protocol.name=dubbo
  6. dubbo.consumer.timeout=30000
  7. #这里需要注意,我们很多项目可能会引入多个dubbo调用者,group 需要把group 放到代码
  8. test.dubbo.consumer.group=dev
  9. dubbo.protocol.port=20880
  10. dubbo.config-center.timeout=50000
  11. dubbo.registry.timeout=4000
  12. dubbo.registry.id=moa-provider-api
  13. dubbo.service.version=1.0.0

4、3 引入common里面接口进行调用

  1. @RestController
  2. @RequestMapping("/dubbo")
  3. public class DubboController {
  4. @Reference(version="${dubbo.service.version}",registry = "${dubbo.registry.id}",group = "${test.dubbo.consumer.group}")
  5. private ProviderService service;
  6. @RequestMapping("/getProviderData")
  7. public String getProviderData(@RequestParam("data") String data) {
  8. return service.getProviderData(data);
  9. }
  10. }

五、dubbo调用结果
在这里插入图片描述
可以看到dubbo将信息注册到zookeeper上面了
在这里插入图片描述

发表评论

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

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

相关阅读

    相关 Dubbo框架入门介绍

      背景    随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不

    相关 Dubbo 入门介绍

    一、什么是Dubbo Dubbo 是阿里巴巴公司一个开源的高性能服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案,使得应用可通过

    相关 dubbo笔记——入门介绍

    一、基本介绍 1、背景说明         随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已经无法应对,分布式服务架构以及流动计算架构势在必行,急需一