最新版dubbo+SpringBoot整合入门

墨蓝 2022-02-01 13:36 302阅读 0赞

因为最近在面试过程中被问到太多关于你会不会dubbo和Spring Cloud的问题了,Spring Cloud的入门在之前已经尝试过了。因此今天自己根据教程撸了一遍入门。

生产者配置

pom.xml

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <spring-boot.version>2.1.4.RELEASE</spring-boot.version>
  4. <dubbo.version>2.7.1</dubbo.version>
  5. <curator.version>2.8.0</curator.version>
  6. <zookeeper.version>3.4.6</zookeeper.version>
  7. </properties>
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-web</artifactId>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.projectlombok</groupId>
  15. <artifactId>lombok</artifactId>
  16. <optional>true</optional>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-test</artifactId>
  21. <scope>test</scope>
  22. </dependency>
  23. <!-- Dubbo Spring Boot Starter -->
  24. <dependency>
  25. <groupId>org.apache.dubbo</groupId>
  26. <artifactId>dubbo-spring-boot-starter</artifactId>
  27. <version>2.7.1</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.apache.dubbo</groupId>
  31. <artifactId>dubbo</artifactId>
  32. <version>2.7.1</version>
  33. </dependency>
  34. <!-- zookeeper -->
  35. <dependency>
  36. <groupId>org.apache.zookeeper</groupId>
  37. <artifactId>zookeeper</artifactId>
  38. <version>${zookeeper.version}</version>
  39. <exclusions>
  40. <exclusion>
  41. <groupId>org.slf4j</groupId>
  42. <artifactId>slf4j-log4j12</artifactId>
  43. </exclusion>
  44. <exclusion>
  45. <groupId>log4j</groupId>
  46. <artifactId>log4j</artifactId>
  47. </exclusion>
  48. <exclusion>
  49. <groupId>io.netty</groupId>
  50. <artifactId>netty</artifactId>
  51. </exclusion>
  52. </exclusions>
  53. </dependency>
  54. <dependency>
  55. <groupId>org.apache.curator</groupId>
  56. <artifactId>curator-framework</artifactId>
  57. <version>${curator.version}</version>
  58. </dependency>
  59. <dependency>
  60. <groupId>org.apache.curator</groupId>
  61. <artifactId>curator-recipes</artifactId>
  62. <version>${curator.version}</version>
  63. </dependency>
  64. </dependencies>
  65. <repositories>
  66. <repository>
  67. <id>apache.snapshots.https</id>
  68. <name>Apache Development Snapshot Repository</name>
  69. <url>https://repository.apache.org/content/repositories/snapshots</url>
  70. <releases>
  71. <enabled>false</enabled>
  72. </releases>
  73. <snapshots>
  74. <enabled>true</enabled>
  75. </snapshots>
  76. </repository>
  77. </repositories>

application.properties

  1. server.port=8082
  2. dubbo.application.name=first-dubbo-provider
  3. dubbo.scan.base-packages=com.zhao.dubbo.service
  4. dubbo.protocol.name=dubbo
  5. dubbo.protocol.port=20880
  6. dubbo.registry.address=zookeeper://127.0.0.1:2181

接口层

  • 接口声明

    public interface GreetingService {

    1. String sayHello(String name);

    }

  • 接口实现

    import com.zhao.dubbo.service.GreetingService;
    import org.apache.dubbo.config.annotation.Service;
    import org.springframework.beans.factory.annotation.Value;

  1. @Service
  2. public class GreetingServiceImpl implements GreetingService {
  3. @Value("${dubbo.application.name}")
  4. private String serviceName;
  5. @Override
  6. public String sayHello(String name) {
  7. return String.format("[%s][%s] : Hello, %s", serviceName,"2", name);
  8. }
  9. }

但是dubbo官网推荐将接口层单独作为一个独立模块使用。然后生产者和消费者均依赖此模块进行操作,详情请见 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

在上述实现没有接口层模块时要特别注意,如果生产者和消费者没有使用同样的报名 ,可能会出现dubbo异常:Failed to check the status of the service . No provider available for the service。此时需要统一接口层的包名才可以正常运行

消费者配置

接口层配置

  • 接口声明

    public interface GreetingService {

    1. String sayHello(String name);

    }

与生产者完全一致

pom配置

同理pom.xml与生产者完全一致

application.properties配置

  1. server.port=8081
  2. spring.application.name=first-dubbo-consumer
  3. dubbo.registry.address=zookeeper://127.0.0.1:2181

调用

  • 启动zookeeper
    调用之前,我们需要将使用的zookeeper启动

我们直接在启动类中采用轮询式调用

  1. import org.apache.dubbo.config.annotation.Reference;
  2. import org.springframework.boot.ApplicationRunner;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.context.annotation.Bean;
  6. import java.util.concurrent.TimeUnit;
  7. @SpringBootApplication
  8. public class DubboConsumerApplication {
  9. @Reference
  10. private GreetingService greetingService;
  11. public static void main(String[] args) {
  12. SpringApplication.run(DubboConsumerApplication.class, args);
  13. }
  14. @Bean
  15. public ApplicationRunner runner(){
  16. int count = 0;
  17. while (true) {
  18. System.out.println(greetingService.sayHello("World "));
  19. try {
  20. TimeUnit.SECONDS.sleep(3);
  21. } catch (InterruptedException e) {
  22. e.printStackTrace();
  23. }
  24. count++;
  25. if (count == 100) {
  26. break;
  27. }
  28. }
  29. return s -> {
  30. System.out.println(greetingService.sayHello("World"));
  31. };
  32. }
  33. }

即可发现,调用成功
在这里插入图片描述

dubbo-admin控制台

首先在github上下载dubbo-admin项目。 地址 https://github.com/apache/incubator-dubbo-admin/blob/develop/README_ZH.md
使用Eclipse或IDEA直接默认方式启动就可以了。
然后使用npm安装前端包内的依赖包之后,使用npm run dev启动

使用 localhost:8081 进行访问
在这里插入图片描述

即可发现我们的服务提供者已显示成功。

发表评论

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

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

相关阅读