Dubbo基础(一)- 第一个例子 HelloDubbo

今天开始,一起研究Dubbo,从最基本的Hello World开始,经过源码一步步学习架构。
本文将以以下问题展开:

  1. Dubbo是啥?
  2. RPC 是啥意思?
  3. 注册中心和配置中心作用是啥?

以上问题看完文章后相信大家就可以清楚,若有疑问,关注博主公众号:六点A君,回复标题获取最新答案><

Dubbo

Dubbo 是一款高性能Java RPC 框架,由阿里巴巴捐给Apache ,经过长时间孵化,Dubbo正式毕业。称为Apache 家庭的顶级项目。
在国内有众多公司使用Dubbo。当然中途有一段事件阿里巴巴并没有对其维护,但是国内很多公司都基于Dubbo 进行功能扩展。例如当当基于dubbo2.x扩展版本dubbox。

RPC 即为 Remote Procedure Call :远程调用。

由这个名字,可以衍生出服务提供者(Provider),服务消费者(Consumer)。当然Provider和 Consumer不在同一台机器,所以用什么来知道Provder的状态呢?如果这个Provder宕机了,而Consumer不知道,而仍然调用,那么当然会报错。
如果就以一个简单的例子,实现起来就很简单。

所以此处引入了注册中心(Register Center),通过注册中心,Consumer就能知道,哪些Provder是存活,反过来说,注册中心会与Provder维持一个消息,可以是心跳,从而知道Provder的状态。

下面引用Dubbo 官网一张图来说明这个基本架构:
在这里插入图片描述

最后,如果需要管理Consumer以及Provder,即引入了Monitor。

Hello Dubbo

经过上面一段话的简单介绍,相信大家已经对RPC,以及Dubbo有了一个大概的轮廓,下面就开始来一个简单的Hello world来进入Dubbo的世界。

下面以Api调用的例子来走进Dubbo的世界,这里使用API方式介绍Dubbo的使用,由于Spring 的IOC将Bean统一管理起来,提升了效率,而Spring Boot 约定大于配置方式,我认为其实对普通开发者了解内部机制并没有任何帮助。当然换一句话说,这就是进步,就像Java Web不可能永远停留在JSP阶段一样。

Register Center

本文例子以Zookeeper作为注册中心,所以首先要启动Zookeeper,具体可以参考:ZooKeeper伪集群搭建

Pom

首先给出Pom文件,目前Dubbo 最新版本是2.7.3

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.3</version>
            <type>pom</type>
        </dependency>

Provider

接下来是服务提供者,在服务提供者中,需要对外暴露 API,从而让Consumer可以调用到服务。

public class ProviderApplication {
    public static void main(String[] args) throws IOException {
        // 服务配置
        ServiceConfig<HelloService> service = new ServiceConfig<>();
        // 设置服务名
        service.setApplication(new ApplicationConfig("dubbo-provider"));
        // 设置注册中心
        service.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
        // 设置服务对应接口
        service.setInterface(HelloService.class);
        // 设置服务对应实现
        service.setRef(new HelloServiceImpl());
        // 暴露服务
        service.export();
        System.out.println("first-dubbo-provider is running.");
        System.in.read();
    }
}

而此时,需要一个接口HelloService,以及一个实现这个接口的实现类HelloServiceImpl,从而当程序启动时,会将该HelloServiceImpl以HelloService服务形式暴露出来。

public interface HelloService {
    String hello(String name);
}

public class HelloServiceImpl implements HelloService {

    @Override
    public String hello(String name) {
        return "hello" + name;
    }
}

Consumer

当服务提供者暴露了服务之后,服务消费者可以通过订阅注册中心,从而获取提供者,从而调用服务。
下面看看Consumer的服务:

public class ConsumerApplication {

    public static void main(String[] args) {
    	// 声明引用配置 
        ReferenceConfig<HelloService> reference = new ReferenceConfig<>();
        // 设置应用名字
        reference.setApplication(new ApplicationConfig("dubbo-consumer"));
        // 设置注册中心,从而可以监听服务
        reference.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
        // 设置服务名,即服务提供者锁暴露的名字
        reference.setInterface(HelloService.class);
        // 获取一个代理实例
        HelloService service = reference.get();
        // 调用实例,执行方法
        String message = service.hello("dubbo I am anla7856");
        System.out.println(message);
    }
}

最终在Consumer将会输出:hellodubbo I am anla7856

第一个例子Dubbo就结束了。

什么?就结束了?如果我要用Dubbo,要这么复杂?我调用10000个实例,我要写10000个这样的获取过程??

当然不是,别激动,博主当然不会这样坑大家,Dubbo 提供了 注解,xml 方式来暴露以及管理服务,所以不用每次调用都这样写。

后文中博主会全部交公滴。

具体本文小例子,可以从 pureapi 获取。

预告

下一篇文章,将从第这个API开始,一步一步看Dubbo在这个过程中做了啥事

参考:

  1. https://github.com/apache/dubbo
  2. https://github.com/apache/dubbo-samples

关注博主公众号: 六点A君。
哈哈哈,Dubbo小吃街不迷路:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值