当前位置:   article > 正文

SpringBoot整合Dubbo+zookeper[详细版]_springboot整合dubbo和zk

springboot整合dubbo和zk

目录

一、简介

什么是Dubbo

1、什么是RPC?

2、 Dubbo干什么? 

3、总结

虚拟机搭建zookeeper

1、安装解压

2、修改配置

3、操作zookeeper

 4、配置参数

dataDir

二、SpringBoot整合Dubbo+zookeeper的demo

1、架构需求

2、搭建父类model

2.1、配置pom文件

 搭建生产者与消费者链接的接口

编写一个接口

3、搭建生产者producer9001 

​编辑

 3.1、配置pom文件

3.2 配置yaml

 3.3、编写代码

3.3.1、主启动类

3.3.2、service生产者

4、搭建消费者Consumer8080

4.1、配置pom文件

4.2、配置yaml

 4.3、编写代码

4.3.1、主启动类

4.3.2、消费者

 开启9001和8080进行测试


一、简介

什么是Dubbo

Dubbo官网地址:http://dubbo.apache.org

Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。

1、什么是RPC?

RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。

需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。 

RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架。Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo等。

2、 Dubbo干什么? 

Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 

节点角色说明:

节点角色名称
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器

调用关系说明:

0. 服务容器负责启动,加载,运行服务提供者。

1. 服务提供者在启动时,向注册中心注册自己提供的服务。

2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Registry服务注册中心Zookeeper

 通过前面的Dubbo架构图可以看到,Registry(服务注册中心)在其中起着至关重要的作用。Dubbo官方推荐使用Zookeeper作为服务注册中心。

Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 。

3、总结

总的来说,dubbo就是一个远程调用服务,而zookeeper则是注册中心,就是将服务通过通过dubbo放入到zookeeper中,还能从dubbo中取出zookpper中的数据

虚拟机搭建zookeeper

链接:https://pan.baidu.com/s/1jD7P6qQEM4kSIbZS8B-YvQ?pwd=1234 
提取码:1234 

1、安装解压

1、安装jdk(自己提前配好JDK)

2、解压zookeeper

一般安装包在 opt目录下,解压后将解压目录放在usr/local下

2、修改配置

(1)将/usr/local/zookeeper/conf这个路径下的zoo_sample.cfg改为zoo.cfg

mv zoo_sample.cfg zoo.cfg

(2)打开zoo.cfg文件,修改dataDir路径

也就是数据存放的位置,一般在zookeeper下创建一个zkData目录

  1. cd /usr/local/zookeeper/
  2. mkdir zkData
  3. ll
  4. cd zkData
  5. pwd #获取全路径
  6. cd conf
  7. vim zoo.cfg
  8. 将文件里边的dataDir路径修改为制定路径
  9. dataDir=上面的路径

3、操作zookeeper

(1)启动Zookeeper的服务端

  1. cd /usr/local/zookeeper/bin
  2. #启动当先zookeeper
  3. ./zkServer.sh start
  4. #查看进程是否启动
  5. jps
  6. #查看状态
  7. ./zkServer.sh status

(2)启动zookeeper的客户端

  1. #还是进入zookeeper的ben目录
  2. #启动客户端
  3. ./zkCli.sh
  4. #查询当前的树结构
  5. ls /
  6. #quit退出

(3)停止zookeeper的服务端

  1. #进入zookeeper的bin
  2. ./zkServer.sh stop

 4、配置参数

dataDir
  1. dataDir=/usr/local/zookeeper/zkData :保存zookeeper中的数据
  2. 注意:默认的tmp目录,是一个临时目录,一段时间里边的数据会被清空,所以不会用在tmp目录下

好了以上就是一个zookeeper的,调试通过之后就可以启动你的zookeeper啦

二、SpringBoot整合Dubbo+zookeeper的demo

1、架构需求

使用SpringBoot+dubbo+zookeeper

一台zookeeper,一个服务端9001,一个消费端8080

2、搭建父类model

点击创建maven项目

2.1、配置pom文件

  1. <properties>
  2. <dubbo.version>2.7.4.1</dubbo.version>
  3. <spring-boot.version>2.3.4.RELEASE</spring-boot.version>
  4. </properties>
  5. <dependencyManagement>
  6. <dependencies>
  7. <!-- Spring Boot -->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-dependencies</artifactId>
  11. <version>${spring-boot.version}</version>
  12. <type>pom</type>
  13. <scope>import</scope>
  14. </dependency>
  15. <!-- Dubbo -->
  16. <dependency>
  17. <groupId>org.apache.dubbo</groupId>
  18. <artifactId>dubbo-bom</artifactId>
  19. <version>${dubbo.version}</version>
  20. <type>pom</type>
  21. <scope>import</scope>
  22. </dependency>
  23. </dependencies>
  24. </dependencyManagement>
  25. <build>
  26. <plugins>
  27. <plugin>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-maven-plugin</artifactId>
  30. </plugin>
  31. </plugins>
  32. </build>

 搭建生产者与消费者链接的接口

编写一个接口

  1. public interface ZkService {
  2. public String ZkTest();
  3. }

3、搭建生产者producer9001 

 3.1、配置pom文件

  1. <dependencies>
  2. <!--引入自己创建的interface-->
  3. <dependency>
  4. <groupId>com.atdession</groupId>
  5. <artifactId>dubbo-zookeeper-interface</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.apache.dubbo</groupId>
  10. <artifactId>dubbo-dependencies-zookeeper</artifactId>
  11. <version>2.7.4.1</version>
  12. <type>pom</type>
  13. <exclusions>
  14. <exclusion>
  15. <groupId>org.slf4j</groupId>
  16. <artifactId>slf4j-log4j12</artifactId>
  17. </exclusion>
  18. </exclusions>
  19. </dependency>
  20. <!-- dubbo 2.7.x引入-->
  21. <dependency>
  22. <groupId>org.apache.dubbo</groupId>
  23. <artifactId>dubbo-spring-boot-starter</artifactId>
  24. <version>2.7.4.1</version>
  25. </dependency>
  26. <!-- spring boot starter -->
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter</artifactId>
  30. </dependency>
  31. </dependencies>

3.2 配置yaml

  1. dubbo:
  2. registry:
  3. address: zookeeper://自己虚拟机上IP:2181 #自己的zookeeper服务器的IP:默认端口号
  4. application:
  5. name: dubbo-zookeeper-producer9001 #注册进去的名字
  6. protocol:
  7. name: dubbo #设置类型
  8. port: -1 #因为dubbo的服务器端口号是不能唯一的,所以,设置为-1会帮我们自动改变端口号
  9. config-center:
  10. timeout: 120000 #超时时间 (毫秒)
  11. server:
  12. port: 9001

 3.3、编写代码

3.3.1、主启动类
  1. @SpringBootApplication
  2. @EnableDubbo(scanBasePackages = "com.atdession.service")
  3. public class Main9001 {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Main9001.class,args);
  6. }
  7. }
3.3.2、service生产者

ZkServiceImpl实现类

  1. import com.atdession.service.ZkService;
  2. import org.apache.dubbo.config.annotation.Service;
  3. //注意这个是dubbo下的Service
  4. @Service(version = "1.0.0")
  5. public class ZkServiceImpl implements ZkService {
  6. @Override
  7. public String ZkTest() {
  8. return "我是生产者";
  9. }
  10. }

4、搭建消费者Consumer8080

4.1、配置pom文件

  1. <dependencies>
  2. <!-- 自己创建的接口-->
  3. <dependency>
  4. <groupId>com.atdession</groupId>
  5. <artifactId>dubbo-zookeeper-interface</artifactId>
  6. <version>1.0-SNAPSHOT</version>
  7. </dependency>
  8. <!-- web-->
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-web</artifactId>
  12. </dependency>
  13. <!-- dubbo-zookeeper-->
  14. <dependency>
  15. <groupId>org.apache.dubbo</groupId>
  16. <artifactId>dubbo-dependencies-zookeeper</artifactId>
  17. <version>2.7.4.1</version>
  18. <type>pom</type>
  19. <exclusions>
  20. <exclusion>
  21. <groupId>org.slf4j</groupId>
  22. <artifactId>slf4j-log4j12</artifactId>
  23. </exclusion>
  24. </exclusions>
  25. </dependency>
  26. <!-- dubbo 2.7.x引入-->
  27. <dependency>
  28. <groupId>org.apache.dubbo</groupId>
  29. <artifactId>dubbo-spring-boot-starter</artifactId>
  30. <version>2.7.4.1</version>
  31. </dependency>
  32. <!--测试-->
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-starter-test</artifactId>
  36. </dependency>
  37. </dependencies>

4.2、配置yaml

  1. dubbo:
  2. application:
  3. name: dubbo-zookeeper-consumer8080
  4. protocol:
  5. name: dubbo
  6. port: -1
  7. registry:
  8. address: zookeeper://自己的虚拟机上的IP:2181 #默认端口号为2181
  9. config-center:
  10. timeout: 12000 #超时时间
  11. server:
  12. port: 8080

 4.3、编写代码

4.3.1、主启动类
  1. @SpringBootApplication
  2. @EnableDubbo(scanBasePackages = "com.atdession.controller")
  3. public class Main8080 {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Main8080.class,args);
  6. }
  7. }
4.3.2、消费者
  1. @RestController
  2. public class SumerController {
  3. //注意:是dubbo中的Reference
  4. @Reference(version = "1.0.0")
  5. ZkService zkService;
  6. @RequestMapping("/zkTest")
  7. public String zkTest(){
  8. String s = zkService.ZkTest();
  9. System.out.println(s);
  10. return "是生产者吗?"+s;
  11. }
  12. }

 开启9001和8080进行测试

注意:先开启生产者,在开启消费者,否则会报错:在zookeeper找不到该接口的错误

 

好啦,详细的整已经实现啦,快去努力研究专研你的项目去吧,加油! 

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

闽ICP备14008679号