简述

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现

RPC是指远程过程调用,是一种进程间通信方式。当服务部署是分布式时,各个服务器需要通信调用,RPC因此诞生了,不仅解决了服务之间调用问题,还能够像调用本地方法一样简单

RPC的基本原理如下图:

这个过程重要的时候序列化和反序列化,因为传输的是二进制包,直接一个对象传过去,怎么知道是啥~你必须把Java对象序列化为二进制格式,传给Server

RPC核心是通信以及序列化

springboot 学习(八)springboot配置 dubbo+zookeeper_zookeeper

 

 

 

dubbo的实现原理如下:

Provider 提供者,可以向注册中心注册服务

Registry 注册中心,提供别人注册,和暴露别人注册的信息

Consumer 消费者,向注册中心订阅服务,注册中心notify提醒消费者,消费者获取提供者提供的服务

Monitor 监控

springboot 学习(八)springboot配置 dubbo+zookeeper_spring_02

 

 

 

实现

zookeeper下载安装启动

dubbo的注册中心,官方建议使用zookeeper,zookeeper的下载,安装后需要将conf文件夹下面的zoo_sample.cfg复制一份改名为zoo.cfg即可

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.3/

springboot 学习(八)springboot配置 dubbo+zookeeper_新版本_03

 

执行cmd文件,启动zookeeper服务

 

 springboot 学习(八)springboot配置 dubbo+zookeeper_新版本_04

 

 

provider 向注册中心注册服务

 

 创建一个普通项目,然后一个创建module,这个module使用springboot框架,

导入以下依赖:

       <!--dubbo依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!--zooker客户端-->
        <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>
            <!--排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

springboot配置文件如下:

注册时,需要提供服务名,也就是我们注册的名字 dubbo.application.name=xxxx

向哪个地方注册 dubbo.registry.address=xxxx  2181是zookeeper默认端口看

注册了什么东西  dubbo.scan.base-packages=xxxxx 这个包下的东西带有@service会被注册

 

server.port=7002
dubbo.application.name=consumer-server
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-packages=com.hys.consumerserver.consumer

 

需注册的类如下:

由于PRC是面向接口的远程调用,需要先创建一个接口来实现他,

@Component 表示注册bean

@Service 表示这个是注册zookeeper 最新版本注解有是@DubboService

public interface provider{
    public String get();
}
@Service
@Component
public class providerImlp implements provider{
    @Override
    public String get() {
        System.out.println("客户端");

        return "123456";
    }
}

 

Consumer消费者消费服务

在上面的项目中,在创建一个module,使用springboot框架,导入和上面一致的依赖

springboot的配置文件如下:

消费者需要提供自己的名字: dubbo.application.name=xxxx

消费者去哪订阅服务:dubbo.registry.address=xxxx

server.port=7003
dubbo.application.name=provide-server
dubbo.registry.address=zookeeper://127.0.0.1:2181

创建一个类,调用提供者提供的服务,如下:

@Component 注册bean

@Reference 远程调用   最新版本注解@DubboReference

@Component
public class provid {

    @Reference
    provider provider;

    public void get(){
        String pro = this.provider.get();
        System.out.println(pro);
        System.out.println("消费者");
    }
}

总结:

dubbo+zookeeper实现 需要如下:

提供者和消费者需要导入dubbo和zookeeper的包,主要用到@Service和 @Reference,最新版本注解有改动分别是@DubboService和 @DubboReference

同时需要在springboot配置文件 配置注册中心地址,这个地址对应可以在linux上或window上或。。需要安装zookeeper并启动!

 

测试代码如下:

@SpringBootTest
class ProviderServerApplicationTests {

    @Autowired
    provid provid;
    @Test
    void contextLoads() {

        provid.get();
    }

}