栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Dubbo入门

Dubbo入门

分布式RPC框架Apache Dubbo 1.1 单体架构

架构说明:全部功能集成在一个项目内。
优点:架构简单,前期开发成本低,开发周期短,适合小型项目。
缺点:对于大型项目不易开发,扩展和维护。技术栈受限。

1.2 垂直架构

架构说明:按照业务进行切割,形成小的单项目。
优点:技术栈可扩展,可使用不同编程语言。
缺点:功能集中在一个项目中,不利于开发、扩展、维护。项目之间功能冗余、数据冗余、耦合性强。

1.3 SOA架构

架构说明:将重复功能或模块抽取成组件的形式,对外提供服务,在项目与服务之间使用ESB(企业服务总线)的
形式作为通信的桥梁。
优点:重复功能或模块抽取为服务,提高开发效率。可重用性高。可维护性高。
缺点:各系统之间业务不同,很难确认功能或模块是重复的。抽取服务的粒度大。系统和服务之间耦合度高。

1.4 微服务架构

架构说明:将系统服务层完全独立出来,抽取为一个一个的微服务。抽取的粒度更细,遵循单一原则。采用轻量级框架协议传输。
架构优点:,有利于提高开发效率。
可以针对不同服务制定对应的优化方案。
适用于互联网时代,产品迭代周期更短。
架构缺点:
粒度太细导致服务太多,维护成本高。对团队的挑战大。

2. Apache Dubbo概述 2.1 Dubbo简介

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

RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。
Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

2.2 Dubbo架构

Provider: 暴露服务的服务提供方。
Consumer:调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。

  1. 服务提供者在启动时,向注册中心注册自己提供的服务。
  2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给
    消费者。
  4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失
    败,再选另一台调用。
  5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中
    心。
3. 服务注册中心Zookeeper

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

3.1安装Zookeeper

下载地址: http://archive.apache.org/dist/zookeeper/.

4. Dubbo快速入门

Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。本小节就是要创建两个应用,一个作为服务的提供方,一个作为服务的消费方。通过Dubbo来实现服务消费方远程调用服务提供方的方法。

4.1 服务提供方开发

(1)创建maven工程(打包方式为war)dubbodemo_provider

    
        com.alibaba
        dubbo
        2.6.0
    
    
        org.apache.zookeeper
        zookeeper
        3.4.7
    
    
        com.github.sgroschupf
        zkclient
        0.1
    
    
        javassist
        javassist
        3.12.1.GA
    
    
        com.alibaba
        fastjson
        1.2.47
    

(2)配置web.xml文件



    Archetype Created Web Application
    
        contextConfigLocation 
        classpath:applicationContext*.xml
     
        org.springframework.web.context.ContextLoaderListener
    

(3)创建服务接口

 ppackage com.alibaba.dubbo.demo;
import java.util.List;

public interface DemoService {
    List getPermissions(Long id);
}

(4)创建服务实现类

package com.alibaba.dubbo.demo.impl;

import com.alibaba.dubbo.demo.DemoService;

import java.util.ArrayList;
import java.util.List;
public class DemoServiceImpl implements DemoService {
    public List getPermissions(Long id) {
        List demo = new ArrayList();
        demo.add(String.format("Permission_%d", id - 1));
        demo.add(String.format("Permission_%d", id));
        demo.add(String.format("Permission_%d", id + 1));
        return demo;
    }
}

(5)用Spring配置声明暴露服务



    
    
    
    
    
    
    
    
    
    

(6)启动远程服务:

package com.alibaba.dubbo.demo.impl;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class Provider {
        public static void main(String[] args) throws IOException {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
            System.out.println(context.getDisplayName() + ": here");
            context.start();
            System.out.println("服务已经启动...");
            System.in.read();
        }
    }

通过Spring配置引用远程服务:



    
    
    
    
    

启动Consumer,调用远程服务:

package com.alibaba.dubbo.consumer;
import com.alibaba.dubbo.demo.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Consumer {
    public static void main(String[] args) {
        //测试常规服务
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("consumer.xml");
        context.start();
        System.out.println("consumer start");
        DemoService demoService = context.getBean(DemoService.class);
        System.out.println("consumer");
        System.out.println(demoService.getPermissions(1L));
    }
}
5. Dubbo管理控制台 5.1 安装

安装步骤:
(1)将资料中的dubbo-admin-2.6.0.war文件复制到tomcat的webapps目录下
(2)启动tomcat,此war文件会自动解压
(3)修改WEB-INF下的dubbo.properties文件,注意dubbo.registry.address对应的值需要对应当前
使用的Zookeeper的ip地址和端口号
dubbo.registry.address=zookeeper://192.168.134.129:2181 dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
(4)重启tomcat

5.2 使用

操作步骤:
(1)访问http://localhost:8080/dubbo-admin-2.6.0/,输入用户名(root)和密码(root)
查看提供者:

查看消费者:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/674228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号