当前位置:   article > 正文

Dubbo框架的Hello World_"@dubboservice(version = \"1.0.0\")"

"@dubboservice(version = \"1.0.0\")"

        最近写基于 Dubbo 的 Demo,本来挺简单的一个 Demo 但是整了两个小时,而最后解决的方法是因为包名的问题。可能很多所谓的经验不过就是一个踩坑的经验。

Dubbo 介绍

       Dubbo 的作用引用 GitHub 的介绍是:Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

       Dubbo 是阿里巴巴开发的框架,后来贡献给了 Apache 基金会。其 GitHub 地址如下:

https://github.com/apache/dubbo-spring-boot-project/blob/master/README_CN.md

       Dubbo 的出现背景可以参考 Dubbo 的官网:

http://dubbo.apache.org/zh-cn/docs/user/preface/background.html

       Dubbo 的官网也提供了一个 Demo 来进行快速入门,但是该 Demo 是以配置的方式来进行开发的,而不是使用注解进行开发的。官网的 Demo 地址如下:

http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

Dubbo 的 HelloWorld

       Dubbo 的服务注册中心需要 Zookeeper 来支持,这里就不对 Zookeeper 进行介绍了。

       我们来创建两个 Spring Boot 项目,一个是 provider,另外一个是 consumer。

       provider 用来提供一个服务,并注册到 Zookeeper 中,consumer 到 Zookeeper 中找到 provider 提供的服务,并进行远程调用。

       两个项目中关于 Dubbo 的依赖是相同,具体依赖如下:

  1. <dependency>
  2. <groupId>org.apache.dubbo</groupId>
  3. <artifactId>dubbo-spring-boot-starter</artifactId>
  4. <version>${dubbo.version}</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.dubbo</groupId>
  8. <artifactId>dubbo</artifactId>
  9. <version>${dubbo.version}</version>
  10. </dependency>
  11. <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
  12. <dependency>
  13. <groupId>org.apache.curator</groupId>
  14. <artifactId>curator-framework</artifactId>
  15. <version>4.2.0</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.apache.curator</groupId>
  19. <artifactId>curator-recipes</artifactId>
  20. <version>4.2.0</version>
  21. <exclusions>
  22. <exclusion>
  23. <groupId>org.apache.zookeeper</groupId>
  24. <artifactId>zookeeper</artifactId>
  25. </exclusion>
  26. </exclusions>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.apache.zookeeper</groupId>
  30. <artifactId>zookeeper</artifactId>
  31. <version>3.4.14</version>
  32. </dependency>

        这里使用的 Dubbo 的版本是 2.7.7,这个版本算是新的版本了。

provider 的代码

        创建 provider 的配置文件 application.yml,配置如下:

  1. spring:
  2. application:
  3. name: provider
  4. server:
  5. port: 8081
  6. dubbo:
  7. registry:
  8. address: zookeeper://192.168.0.107:2181
  9. application:
  10. name: provider
  11. scan:
  12. base-packages: com.manong.dubbo.service.impl

        接着我们定义一个类文件 DemoServiceImpl.java,在该类文件中实现一个 say 方法,将该类和 say 方法抽象为一个接口 IDemoService.java,这个接口文件要提供给 consumer 进行使用。DemoServiceImpl.java 文件的代码如下:

  1. @DubboService(version = "1.0.0", timeout = 10000, interfaceClass = IDemoService.class)
  2. @Component
  3. public class DemoServiceImpl implements IDemoService {
  4. @Override
  5. public String say(String name) {
  6. System.out.println("hi " + name + "!");
  7. return "hi " + name + "!";
  8. }
  9. }

        可以看到,在类定义上增加了一个 @DubboService 的注解,该注解将会将该类作为服务被外部进行调用。

consumer 的代码

        consumer 的 Spring Boot 项目在创建时引入 Spring Web 的依赖,该项目作为一个 Web 项目来进行测试。它同样需要引入 Dubbo 和 Zookeeper 的依赖,依赖的配置和前面的相同。

        创建 consumer 的配置文件 application.yml,配置如下:

  1. spring:
  2. application:
  3. name: comsumer
  4. server:
  5. port: 8082
  6. dubbo:
  7. application:
  8. name: comsumer
  9. registry:
  10. address: zookeeper://192.168.0.107:2181

        接着,将 provider 的 IDemoService.java 复制到该项目中,只是复制接口的定义(provider 和 consumer 是分别创建的,如果是聚合项目需要将接口定义再单独抽取成一个服务),并不复制接口实现类。

        然后定义一个 Controller 的类,类名是 TestController.java 文件,代码如下:

  1. @RestController
  2. @RequestMapping("/test")
  3. public class TestController {
  4. @DubboReference(version = "1.0.0")
  5. IDemoService demoService;
  6. @RequestMapping("/say")
  7. public String say(String name)
  8. {
  9. return demoService.say(name);
  10. }
  11. }

       这里我们通过 @DubboReference 注解将 Service 进行注入。

        这样两个项目的代码就完成了。

项目测试

        启动 Zookeeper 的服务,然后先运行 provider 的程序,待 provider 程序启动好,用 Zookeeper 的客户端连接 Zookeeper 的服务器,查看是否有 Dubbo 注册的服务。如果有 Dubbo 注册的服务,那么就启动 consumer 的项目,待 consumer 的项目启动成功后,我们打开浏览器访问 localhost:8082 来访问我们的接口,截图如下:

        可以看到,我们的服务调用成功了。

        网上关于 Dubbo 的注解的介绍更多的是旧版本的 @Service 和 @Reference,而不是本文中的 @DubboService 和 @DubboReference。不过它们的用法基本是一致的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/166040?site
推荐阅读
相关标签
  

闽ICP备14008679号