Springboot 整合dubbo和zookeeper的简单使用

分布式是将服务分散部署在多台机器上,以提高系统可用性和处理能力。Dubbo是一款高性能的Java RPC框架,用于服务治理。Zookeeper作为注册中心,管理分布式服务。在SpringBoot项目中,通过引入Dubbo和Zookeeper,可以实现服务提供者和消费者的注册与调用。测试表明,服务能够正常通信,验证了分布式架构的有效性。
摘要由CSDN通过智能技术生成

什么是分布式

在了解什么是dubbo和zookeeper之前,我们需要先了解什么是分布式,因为dubbo和zookeeper就是为了解决分布式所带来的问题才顺势而生的。以下是百度百科对分布式的介绍:

分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的。逻辑架构设计完后就该做物理架构设计,系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署,生产环境下的微服务肯定是分布式部署的,分布式部署的应用不一定是微服务架构的,比如集群部署,它是把相同应用复制到不同服务器上,但是逻辑功能上还是单体应用。

以往的项目都基本是单体应用,所有的功能都在一个项目模块里,这样的部署方式对于用户访问量少的小型应用来说是可以这么做的,但对于访问量大的应用来说,由于某一功能的经常访问,可能会导致服务器的奔溃,这时候就有两个分布式的解决方案可供选择:

  • 第一是多部署几台服务器,每台服务器都能处理相同的请求任务,然后利用负载均衡实现各服务器之间的利用率平衡,这就是集群。
  • 第二是将项目分成几个模块,分别部署在不同的服务器上,对于访问请求次数多的模块可以多分配服务器。

分布式的出现我认为就是为了减轻服务器的压力,防止项目奔溃停止,也为了解耦合。分布式的出现也面临着一些问题,比如部署在不同服务器中的模块如何进行通信,怎么管理这些分散的服务,服务崩了怎么办等等一些列问题,所以就顺势而出了很多解决问题的框架,dubbo就是其中之一。

什么是dubbo

以下是百度给的解释:

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

看介绍发现了个新的知识点—RPC,什么是RPC呢?不慌,再问下百度

RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。
在这里插入图片描述

我的理解是以前我们的调用都是本地调用,在类里面写方法然后在别的类或者自己类调用,这些都是在本地进行的,而远程调用就是部署在不同服务器上的两个模块,其中一个模块要调用另一个模块中某个接口中的方法。拿生活中的事情举个例子,你在网上购物,平常快递到了你都是自己去快递站拿快递,可是某一天你有事出差了,快递又刚好到了,你就打电话叫你的好朋友帮你去拿下快递,这就是远程调用。
以下是官网给Dubbo的原理图:
在这里插入图片描述
这张图的执行流程就是首先你需要一个Provider来提供服务并且注册到Registry(注册中心),对于要使用的服务的Consumer需要向Registry订阅你所需要的服务,然后注册中心会返回给你提供者的地址,然后你选择其中一个来执行服务,Moniter就是个监控中心,隔断时间就监控Consumer和Provider的状态。Dubbo只是个框架,其中Registry需要外界提供,而这就是zookeeper,对于zookeeper,就是文件系统+监听机制。

Springboot 整合dubbo和zookeeper

1、下载zookeeper

百度网盘下载链接–>下载链接 提取码:1314
下载后解压如下:
在这里插入图片描述
点开conf,复制一份下面的文件在当前位置并改名为: zoo.cfg
在这里插入图片描述
如果要开启服务就点开bin,看自己是什么系统就点哪个
在这里插入图片描述

2、springboot的配置

1、创建两个modul,分别是provider和consumer,如下(可以先创建Empty项目,再创建两个modul,因为只是简单测试,只需勾选web模块就行)
在这里插入图片描述

在这里插入图片描述

3、provider的配置

1、导入相关的依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.12</version>
        </dependency>

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2、创建需要提供服务的包
在这里插入图片描述
TickServiceImpl类如下:

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;

@DubboService//向注册中心暴露该服务
@Component
public class TickServiceImpl implements TickService {
    @Override
    public String printInfo() {
        return "hello world";
    }
}

还得在启动类加上个注解@EnableDubbo
在这里插入图片描述
3、配置文件

#服务的名称
dubbo.application.name=provider-server
#服务注册地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#提供的服务
dubbo.scan.base-packages=com.example.service
#项目启动端口
server.port=8081

这里的2181你自己也可以改成别的,点开刚改名的zoo.cfg文件
在这里插入图片描述
到这provider就配置完了。

4、consumer配置

1、导入依赖(与provider导入的依赖一样)
2、创建相应的包
在这里插入图片描述
3、配置文件

#服务的名称
dubbo.application.name=consume-server
#服务注册地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

server.port=8082

4、创建个测试类来引用

@Component
public class UserService {

    @DubboReference//引用provider提供的服务
    TickService tickService;

    public void info(){
        System.out.println(tickService.printInfo());
    }

}

到这consumer就写好了,接下来就是测试了。

测试

1、首先要打开zookeeper服务
在这里插入图片描述
在这里插入图片描述
2、先打开provider项目,再打开consumer项目
在这里插入图片描述
3、在consumer中写个测试

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        userService.info();
    }

}

测试结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值