dubbo-springboot入门级demo

Dear 丶 2021-12-19 04:29 368阅读 0赞

1. dubbo-springboot入门级demo

1.1. 前言

  1. 最后一个做运维的朋友和我提起,他们公司想做个dubbo灰度发布的功能,而这个功能落到了他头上。在我的印象里,dubbo应该可以通过扩展代码来实现特定用户路由到特定服务器,来实现这方面的灰度功能,但完全由运维去做,可能就需要脚本了吧,dubbo是否支持脚本我还不清楚,趁着这个进一步熟悉dubbo的过程,我来系统的学一下dubbo的基本功能,由于现在基本都用springboot来开发了,所以直接从springboot入门级dubbo应用开始

1.2. 生产者

1.2.1. 服务方法和接口

  1. public interface GreetingService {
  2. String sayHello(String name);
  3. }
  4. import com.tzxylao.dubbo.service.GreetingService;
  5. import org.apache.dubbo.config.annotation.Service;
  6. import org.springframework.beans.factory.annotation.Value;
  7. @Service(version = "1.0.0")
  8. public class GreetingServiceImpl implements GreetingService {
  9. @Value("${dubbo.application.name}")
  10. private String serviceName;
  11. @Value("${dubbo.protocol.port:0}")
  12. private int port;
  13. @Override
  14. public String sayHello(String name) {
  15. return String.format("[%s][%s] : Hello, %s", serviceName,port, name);
  16. }
  17. }

1.2.2. 配置文件application.properties

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

1.2.3. pom

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <spring-boot.version>2.1.1.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. </dependency>
  33. <!-- zookeeper -->
  34. <dependency>
  35. <groupId>org.apache.zookeeper</groupId>
  36. <artifactId>zookeeper</artifactId>
  37. <version>${zookeeper.version}</version>
  38. <exclusions>
  39. <exclusion>
  40. <groupId>org.slf4j</groupId>
  41. <artifactId>slf4j-log4j12</artifactId>
  42. </exclusion>
  43. <exclusion>
  44. <groupId>log4j</groupId>
  45. <artifactId>log4j</artifactId>
  46. </exclusion>
  47. <exclusion>
  48. <groupId>io.netty</groupId>
  49. <artifactId>netty</artifactId>
  50. </exclusion>
  51. </exclusions>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.apache.curator</groupId>
  55. <artifactId>curator-framework</artifactId>
  56. <version>${curator.version}</version>
  57. </dependency>
  58. <dependency>
  59. <groupId>org.apache.curator</groupId>
  60. <artifactId>curator-recipes</artifactId>
  61. <version>${curator.version}</version>
  62. </dependency>
  63. </dependencies>
  64. <repositories>
  65. <repository>
  66. <id>apache.snapshots.https</id>
  67. <name>Apache Development Snapshot Repository</name>
  68. <url>https://repository.apache.org/content/repositories/snapshots</url>
  69. <releases>
  70. <enabled>false</enabled>
  71. </releases>
  72. <snapshots>
  73. <enabled>true</enabled>
  74. </snapshots>
  75. </repository>
  76. </repositories>

1.2.4. 启动方法

  1. @EnableAutoConfiguration
  2. public class DubboApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(DubboApplication.class, args);
  5. }
  6. }

1.3. 消费者

1.3.1. 接口同上

1.3.2. pom同上

1.3.3. 配置文件

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

1.3.4. 启动方法

  1. @EnableAutoConfiguration
  2. public class DubboConsumerApplication {
  3. @Reference(version = "1.0.0")
  4. private GreetingService greetingService;
  5. public static void main(String[] args) throws InterruptedException {
  6. SpringApplication.run(DubboConsumerApplication.class, args);
  7. }
  8. @Bean
  9. public ApplicationRunner runner(){
  10. int count = 0;
  11. while (true) {
  12. System.out.println(greetingService.sayHello("World "));
  13. try {
  14. TimeUnit.SECONDS.sleep(3);
  15. } catch (InterruptedException e) {
  16. e.printStackTrace();
  17. }
  18. count++;
  19. if (count == 100) {
  20. break;
  21. }
  22. }
  23. return s -> {
  24. System.out.println(greetingService.sayHello("World"));
  25. };
  26. }
  27. }

1.4. 运行结果

  1. ...
  2. [first-dubbo-provider][20884] : Hello, World
  3. [first-dubbo-provider][20884] : Hello, World
  4. ...

1.5. 总结

  1. 这里需要注意的几个核心点就是扫描包路劲别搞错
  2. @Refernece注解用的是dubbo包里的,@Service也是dubbo包里的

Github地址:https://github.com/tzxylao/learn-demo

转载于:https://www.cnblogs.com/sky-chen/p/10734549.html

发表评论

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

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

相关阅读

    相关 Disruptor入门demo

    [Disruptor入门][Disruptor]demo 一、什么是 Disruptor Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(

    相关 mybatis入门+demo

    先百科一波: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

    相关 SpringBoot入门Demo

    一.开发环境 1.Eclipse STS 2.maven 3.6.0(Maven的安装配置等这里不做介绍,不会的小伙伴可以百度一下) 3.jdk1.8 4.Spri