Dubbo - Dubbo框架搭建

灰太狼 2022-05-08 02:16 428阅读 0赞

简单说明

Dubbo是一个基于RPC协议的分布式框架,RPC的全称为Remote Procedure Call,其目的为实现远程调用。而分布式的目的是为了能够更好的针对不同的业务进行横向扩展,从而使得程序稳定高可用,响应速度快。所以一个基于RPC协议的分布式框架,是一个非常不错的Idea。Dubbo使用RPC协议而不用HTTP协议,我们可以在百度百科上了解到,RPC协议跨了OSI架构的应用层和传输层,传输速度步骤简化所以速度会更快。不得不说Dubbo对技术起点的选择真的很棒!

基础概念

  1. 在Dubbo中,提供服务的应用叫做提供者provider。消费服务的应用叫做消费者consumer。当一个provider需要调用别的provider提供的服务,那么这个provider既是提供者也是消费者
  2. 所有的分布式服务,都会将服务暴露出去,所谓暴露就是提供接口让别的应用调用。常见的Http接口提供方实际上也可以认为是一个分布式应用。
  3. Dubbo中的服务暴露或者说服务注册,需要依赖第三方的注册中心,如ZooKeeper。provider将服务注册到zk中,consumer在zk中查找并调用服务。但服务最终是在提供者所在服务器执行

一、安装ZooKeeper

一下载,二配置,三安装。详情请参阅《Dubbo - ZooKeeper的安装和基本使用》

二、搭建提供者项目

搭建提供者项目基本思路如下:

  1. 搭建一个Maven多模块工程,至少需要分成三个子工程,一个用于暴露,一个用于实现,一个用于启动。
  2. 添加jar依赖
  3. 添加dubbo配置文件
  4. 增加Dubbo提供者启动类

四个步骤即可完成提供者的搭建。

  1. 搭建一个Maven多模块工程
    在这里插入图片描述
    我们假设为用户模块单独搭建一个服务,那么得到以上用户模块服务提供者项目。可以看出这是一个Maven多模块项目。现在一一解释:

    • dubbo-user-service工程为父工程
    • user-servce工程为暴露工程,负责定义对外暴露的接口和对象
    • user-service-impl工程为接口实现工程,负责对接口的实现
    • user-startup工程为启动工程,它将加载上下文并启动Dubbo服务

    这些工程中我简单说明以下几点:

    1. user-service, user-service-impl, user-startup工程的parent都是dubbo-user-service。
    2. user-service-impl依赖了user-serivce
    3. user-startup依赖了user-service-impl

消费者只需要引入user-service即可对用户模块dubbo服务的调用。

  1. 添加jar依赖
    当我们搭建好一个这样的多模块项目后,我们需要引入依赖的jar包

    • 在dubbo-user-service/pom.xml中增加

    2.6.3

在parent工程中定义dubbo的版本,便于管理包版本。这里采用dubbo-2.6.3

  • 在user-service-impl/pom.xml中增加



    org.springframework
    spring-context
    4.3.6.RELEASE
    provided


    com.chinack
    user-service
    1.0-SNAPSHOT

增加spring-context包是为了在实现类中使用@Service注解来声明service组件。可以看到spring-context的scope为provided,因为该包在user-startup中已经引入。

  • 在user-startup/pom.xml中增加




    com.alibaba
    dubbo
    ${dubbo.version}



    org.apache.zookeeper
    zookeeper
    3.4.13



    org.apache.curator
    curator-framework
    4.0.1



    com.chinack
    user-service-impl
    ${project.version}

搭建Dubbo提供者最重要的三个包就在这里

引入Dubbo依赖包,版本为2.6.3(版本在dubbo-user-service/pom.xml>中定义);
引入zk包用于将服务注册到zk中;
引入了curator依赖包。

最后引入了我们的接口实现工程。之前有说过user-startup依赖了spring的包,那是因为Dubbo本身就依赖了它所需要的spring包
这样,所有的jar包依赖都做好了。

  1. 增加配置文件
    user-startup/src/main/resources中增加spring.xmluser-dubbo-provider.xml配置文件,如下:

    • user-dubbo-provider.xml

    <?xml version=”1.0” encoding=”UTF-8”?>















    • spring.xml

    <?xml version=”1.0” encoding=”UTF-8”?>





  2. 增加Dubbo提供者启动类
    我们在user-startup工程中构建一个Application类用于启动,代码如下:

    public class Application {

    1. public static void main(String[] args){
    2. ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring.xml");
    3. applicationContext.start();
    4. System.out.println("User provider started");
    5. try {
    6. // 为了防止上下文加载后自动关闭,通过接收用户输入流来阻止。
    7. System.in.read();
    8. } catch (IOException e) {
    9. e.printStackTrace();
    10. }
    11. }

    }

到这里,服务提供者就算搭建完成了。我们可以编写一个服务如UserService,然后搭建一个Dubbo Admin用于查看是否成功注册到本地zk中,如下图:
在这里插入图片描述

三、搭建消费者项目

搭建消费者基本思路:

  1. 搭建一个web项目
  2. 添加jar依赖
  3. 添加消费者配置

三个步骤即可完成消费者项目的搭建,这里我以Spring Boot为例

  1. 搭建一个Spring Boot项目(略)
  2. 添加jar依赖

    1. <dubbo.version>2.6.3</dubbo.version>






    com.alibaba
    dubbo
    ${dubbo.version}



    org.apache.curator
    curator-framework
    4.0.1



    com.chinack
    user-service
    1.0-SNAPSHOT

  3. 添加消费者配置
    在resources下增加配置文件dubbo-consumer.xml如下:

    <?xml version=”1.0” encoding=”UTF-8”?>











增加配置类,加载dubbo-consumer.xml文件

  1. package com.chinack.consumer.config;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.context.annotation.ImportResource;
  4. /** * 加载Dubbo消费者配置 * @author Chinack * @date 2018/10/8 16:53 */
  5. @Configuration
  6. @ImportResource("classpath:dubbo-consumer.xml")
  7. public class DubboConsumerConfig {
  8. }

这样,消费者项目就搭建完成了。我们可以尝试创建Controller调用提供者的service。注意:默认情况下消费者会对提供者进行检查,如果提供者未启动,则会出现Failed to check the status of the service xxx。成功启动并调用到了user-service提供的用户服务后得到下图:
在这里插入图片描述

具体内容可以看源码,我把源码放在了gitee上。
源码地址:https://gitee.com/ck-tech/dubbo

(完)

发表评论

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

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

相关阅读

    相关 Dubbo 入门

    一、背景与架构(摘自官网) 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不

    相关 Dubbo - Dubbo框架

    简单说明 Dubbo是一个基于RPC协议的分布式框架,RPC的全称为Remote Procedure Call,其目的为实现远程调用。而分布式的目的是为了能够更好的针对不