dubbo 基于springboot入门

我不是女神ヾ 2022-03-25 08:48 252阅读 0赞

dubbo也是RPC框架,它的概念是通过网络来进行通讯。

通过实践,个人对dubbo的感受为没有spring cloud那么多组建,只有服务注册中心,服务提供者和服务消费者,以及现场的监控服务的admin管理页面。

主体的架构图如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODMzNjY1OA_size_16_color_FFFFFF_t_70

而且踩了很多坑,比如版本问题,大家要注意以下。

https://blog.csdn.net/gaopeng0071/article/details/81869878

我遇到的问题是:服务提供者老是注册不到服务注册中心,我使用的是在启动类上添加@EnableDubboConfiguration

然后再mvn clean,mvn install 缺啥jar再导入,最后搞定的。

接下来先实现下dubbo admin监控组件,

我是直接再网上下载dubbo-admin.war然后放到tomcat webapps里面进行运行,由于在dubbo源码下载下来老是有些jar导入不了,想省事的可以再下面这里下载。

百度云盘:链接: https://pan.baidu.com/s/15qzhmdL1EvCj8T5Hjp\_VZg 提取码: cyhn

tomcat启动之后,浏览器输入http://localhost:8080/dubbo-admin-2.6/,账号密码都是root

dubbo 服务提供者

pom.xml导入jar包

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.0.1.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>demo</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-test</artifactId>
  27. <scope>test</scope>
  28. </dependency>
  29. <dependency>
  30. <groupId>com.alibaba.spring.boot</groupId>
  31. <artifactId>dubbo-spring-boot-starter</artifactId>
  32. <version>2.0.0</version>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.apache.zookeeper</groupId>
  36. <artifactId>zookeeper</artifactId>
  37. <version>3.4.6</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. </exclusions>
  48. </dependency>
  49. <dependency>
  50. <groupId>com.101tec</groupId>
  51. <artifactId>zkclient</artifactId>
  52. <version>0.10</version>
  53. </dependency>
  54. </dependencies>
  55. <build>
  56. <plugins>
  57. <plugin>
  58. <groupId>org.springframework.boot</groupId>
  59. <artifactId>spring-boot-maven-plugin</artifactId>
  60. </plugin>
  61. </plugins>
  62. </build>
  63. </project>

我把完整的都贴出来,很多入门博客都是没有贴完整的maven jar代码的,有时一直版本不对或者导入少了,为啥有些不需要里面的zkclient呢,可能是dubbo版本问题吧,具体不了解。

实现接口

  1. import com.example.demo.User;
  2. public interface UserService {
  3. public User getUser();
  4. }

dubbo也是通过接口监听来调用服务的。

接口实现

  1. import com.alibaba.dubbo.config.annotation.Service;
  2. import com.example.demo.User;
  3. import org.springframework.stereotype.Component;
  4. import java.util.UUID;
  5. @Component
  6. @Service(version = "1.0.0",timeout = 10000,interfaceClass = UserService.class)
  7. public class UserServiceImpl implements UserService {
  8. @Override
  9. public User getUser() {
  10. User user=new User();
  11. user.setId(UUID.randomUUID().toString());
  12. user.setName("dajitui");
  13. return user;
  14. }
  15. }

@Service注解很重要,让dubbo扫描的时候可以发现。

配置文件

  1. ## Dubbo 服务提供者配置
  2. spring.dubbo.application.name=provider
  3. spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
  4. spring.dubbo.registry.check=false
  5. spring.dubbo.protocol.port=20880
  6. spring.dubbo.protocol.name=dubbo
  7. spring.dubbo.protocol.host=127.0.0.1
  8. spring.dubbo.scan.base-packages=com.example.demo.service
  9. server.port=8082

!!!注意提前开启zookeeper

.这里还有一个坑,这个要看你导入的dubbo jar是哪个,有些是上面spring.dubbo开头,有些是dubbo.开头的。

在启动类添加@EnableDubboConfiguration注解

服务消费者

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.0.1.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>demo</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-test</artifactId>
  27. <scope>test</scope>
  28. </dependency>
  29. <dependency>
  30. <groupId>com.alibaba.boot</groupId>
  31. <artifactId>dubbo-spring-boot-starter</artifactId>
  32. <version>0.2.0</version>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.apache.zookeeper</groupId>
  36. <artifactId>zookeeper</artifactId>
  37. <version>3.4.6</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. </exclusions>
  48. </dependency>
  49. </dependencies>
  50. <build>
  51. <plugins>
  52. <plugin>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-maven-plugin</artifactId>
  55. </plugin>
  56. </plugins>
  57. </build>
  58. </project>

配置文件

  1. ## 避免和 server 工程端口冲突
  2. server.port=8081
  3. ## Dubbo 服务消费者配置
  4. dubbo.application.name=consumer
  5. dubbo.registry.address=zookeeper://127.0.0.1:2181
  6. dubbo.registry.check=false
  7. dubbo.scan.base-packages=com.example.demo.service
  8. dubbo.protocol.host=127.0.0.1
  9. dubbo.consumer.check=false

同样要有一个UserService接口

编写一个控制类

  1. @RestController
  2. public class UserController {
  3. @Reference(version = "1.0.0")
  4. UserService userService;
  5. @RequestMapping("/save")
  6. public Object saveUser() {
  7. return userService.getUser();
  8. }
  9. }

@Reference其实是去zookeeper中查找是不是有这个的服务提供者

正常启动即可。访问localhost:8081/save即可看到

项目地址:https://github.com/dajitui/dubbo-test

发表评论

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

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

相关阅读