分布式架构Dubbo

Posted 小诚信驿站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式架构Dubbo相关的知识,希望对你有一定的参考价值。

谨以此文献给正在奋斗的你。

1、Dubbo定义

Dubbo 是由阿里巴巴开放的高性能,基于java的RPC框架。 与许多RPC系统一样,dubbo基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法。 在服务器端,服务器实现该接口并运行dubbo服务器来处理客户端调用。 在客户端,客户端有一个stub,提供与服务器相同的方法。

2、Dubbo架构

 Dubbo提供三个关键功能,包括基于接口的远程呼叫,容错和负载平衡以及自动服务注册和发现。 Dubbo框架在阿里巴巴以外,其他公司包括京东,当当,去哪儿,考拉等在内。

3、指南

本指南通过一个简单的工作示例让您以Java中的dubbo开始。 您可以在github上的dubbo项目中找到目录“dubbo-demo”中的完整工作示例。

3.1必要前提条件

  • JDK: version 6 or higher

  • Maven: version 3 or higher

3.2Maven依赖

你可以使用最新的发布包去构建你的dubbo应用

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.5</version></dependency>

3.3定义service接口

由于服务提供商(servise provider)和服务使用者(service consumer)都依赖于相同的接口,因此强烈建议将下面的接口定义放在一个可以由提供者模块和消费者模块共享的单独模块中。

package com.alibaba.dubbo.demo;public interface DemoService {    String sayHello(String name);
}

3.4实现service provider

package com.alibaba.dubbo.demo.provider;import com.alibaba.dubbo.demo.DemoService;public class DemoServiceImpl implements DemoService {    public String sayHello(String name) {        return "Hello " + name;
    }
}

3.5配置service provider

下面的代码片段显示了dubbo服务提供程序如何配置spring框架,这是建议的,但是如果是首选,还可以使用API配置。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
       <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="demo-provider"/>
    <!-- 使用zookeeper注册中心暴露服务地址   端口是zookeeper 中配置的2181-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <!-- 组播注册 -->
    <!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/>
    <!-- 具体的实现bean -->
    <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/></beans>

3.5启动service provider

import org.springframework.context.support.ClassPathXmlApplicationContext;public class Provider {    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(                new String[] {"META-INF/spring/dubbo-demo-provider.xml"});
        context.start();
        System.in.read(); // press any key to exit
    }
}

3.6配置service consumer

再次,下面的代码演示了Spring集成

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> 
    <dubbo:application name="demo-consumer"/>
     <!-- 使用zookeeper注册中心暴露服务地址 -->  
     <dubbo:registry address="zookeeper://127.0.0.1:2181" /> 
     <!-- 组播注册 -->
    <!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
    <!-- 生成远程服务代理,可以像使用本地bean一样使用DemoService -->  

    <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService"/></beans>

3.7运行service consumer

import com.alibaba.dubbo.demo.DemoService;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Consumer {    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(                new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
        context.start();
        DemoService demoService = (DemoService) context.getBean("demoService"); // obtain proxy object for remote invocation
        String hello = demoService.sayHello("world"); // execute remote invocation
        System.out.println(hello); // show the result
    }
}

Dubbo用户手册

Dubbo管理员手册


以上是关于分布式架构Dubbo的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo

Dubbo

dubbo整体架构

Dubbo视频教程《基于Dubbo的分布式系统架构视频教程》----课程列表

Dubbo简介

Dubbo的RPC远程过程调用+Dubbo的负载均衡+Zookeeper注册中心