初识Dubbo 系列之1-Dubbo是什么

Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用。

项目主页:http://alibaba.github.io/dubbo-doc-static/Home-zh.htm

Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

其核心部分包含:

  • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo能做什么?

  • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

快速启动

(+) (#)

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
如果不想使用Spring配置,而希望通过API的方式进行调用(不推荐),请参见:API配置 (+)

服务提供者

(#)

完整安装步骤,请参见:示例提供者安装 (+)

定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)

DemoService.java

package
com.alibaba.dubbo.demo;

public
interface
DemoService {

    String sayHello(String name);

}

在服务提供方实现接口:(对服务消费方隐藏实现)

DemoServiceImpl.java

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;

    }

}

用Spring配置声明暴露服务:

provider.xml

<?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="hello-world-app" 
/>

    <!-- 使用multicast广播注册中心暴露服务地址 -->

    <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>

加载Spring配置:

Provider.java

import
org.springframework.context.support.ClassPathXmlApplicationContext;

public
class
Provider {

    public
static void
main(String[] args)
throws
Exception {

        ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new
String[] {"http://10.20.160.198/wiki/display/dubbo/provider.xml"});

        context.start();

        System.in.read();
// 按任意键退出

    }

}

服务消费者

(#)

完整安装步骤,请参见:示例消费者安装 (+)

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

consumer.xml

<?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="consumer-of-helloworld-app" 
/>

    <!-- 使用multicast广播注册中心暴露发现服务地址 -->

    <dubbo:registry
address="multicast://224.5.6.7:1234"
/>

    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->

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

</beans>

加载Spring配置,并调用远程服务:(也可以使用IoC注入)

Consumer.java

import
org.springframework.context.support.ClassPathXmlApplicationContext;

import
com.alibaba.dubbo.demo.DemoService;

public
class
Consumer {

    public
static void
main(String[] args)
throws
Exception {

        ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new
String[] {"http://10.20.160.198/wiki/display/dubbo/consumer.xml"});

        context.start();

        DemoService demoService = (DemoService)context.getBean("demoService");
// 获取远程服务代理

        String hello = demoService.sayHello("world");
// 执行远程方法

        System.out.println( hello );
// 显示调用结果

    }

}

时间: 2024-12-16 22:24:57

初识Dubbo 系列之1-Dubbo是什么的相关文章

dubbo系列四、dubbo启动过程源码解析

一.代码准备 1.示例代码 参考dubbo系列二.dubbo+zookeeper+dubboadmin分布式服务框架搭建(windows平台) 2.简单了解下spring自定义标签 https://www.jianshu.com/p/16b72c10fca8 Spring自定义标签总共可以分为以下几个步骤 定义Bean 标签解析生成接收配置的POJO. 定义schema文件,定义自定义标签的attr属性 定义解析类parser,遇到自定义标签如何解析. 定义命名空间处理类namespaceSup

dubbo系列二、dubbo+zookeeper+dubboadmin分布式服务框架搭建(windows平台)

一.zookeeper配置中心安装 1.下载安装包,zookeeper-3.4.6.tar.gz 2.解压安装包,修改配置文件 参考zookeeper-3.4.6/conf/zoo_sample.cfg文件,同步录下建立zoo.cfg,配置如下: # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can tak

dubbo系列七、dubbo @Activate 注解使用和实现解析

一.用法 Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上,dubbo用它在spi扩展类定义上,表示这个扩展实现激活条件和时机. @Activate(group = Constants.PROVIDER) public class DrpcServerInterceptor implements Filter{ private final ServerRequestInterceptor serverRequestInterceptor; private final S

初识Dubbo 系列之6-Dubbo 配置

配置 Xml配置 配置项说明 详细配置项,请参见:配置参考手册 (+) API使用说明 如果不想使用Spring配置,而希望通过API的方式进行调用,请参见:API配置 (+) 配置使用说明 想知道如何使用配置,请参见:快速启动 (+) 示例: provider.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/s

初识Dubbo 系列之7-Dubbo 示例

示例 想完整的运行起来,请参见:快速启动 (+),这里只列出各种场景的配置方式 以下示例全部使用基于Spring的Xml配置 (+)作为参考,如果不想使用Spring,而希望通过API的方式进行调用,请参见:API配置 (+) 启动时检查 (+) (#) Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true. 如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则

初识Dubbo 系列之9-Dubbo 负载均衡

负载均衡 (+) (#) 在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用. 可以自行扩展负载均衡策略,参见:负载均衡扩展 Random LoadBalance 随机,按权重设置随机概率. 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重. RoundRobin LoadBalance 轮循,按公约后的权重设置轮循比率. 存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久

【dubbo系列】dubbo与Sentinel整合篇

在阿里巴巴中间件公众号了解的Sentinel框架,sentinel字面意思为哨兵,开始以为是redis的sentinel哨兵,了解后才发现并不是.微服务流行,相信很多团队拆分服务,进行服务和服务之间调用,Sentinel是分布式架构体系中流量控制框架,主要以流量为切入点,熔断降级,系统保护等功能额,来保护系统稳定性. Sentinel简要介绍:流量控制功能:提供服务负载能力有限,为防止某个服务流量过大,导致拖垮了整个系统的其它服务,可以对其接口流量监控,对其进行处理.sentinel具体的怎么进

Dubbo 系列(07-3)集群容错 - 负载均衡

目录 Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 1.1 负载均衡算法 1.2 继承体系 2. 源码分析 2.1 AbstractLoadBalance 2.2 RandomLoadBalance 2.3 LeastActiveLoadBalance 2.4 ConsistentHashLoadBalance Dubbo 系列(07-3)集群容错 - 负载均衡 Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 相关

Dubbo 系列(07-5)集群容错 - Mock

Dubbo 系列(07-5)集群容错 - Mock [toc] Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 相关文档推荐: Dubbo 实战 - 服务降级 Dubbo 实战 - 本地伪装 Dubbo 实战 - 本地存根 Dubbo 的集群容错中默认会组装 MockClusterWrapper,它实现了 Dubbo 的服务降级和本地伪装. 1.1 服务降级 服务降级配置方式,更多参考官网 Dubbo 实战 - 服务降级 <dubbo:reference

SpringBoot系列之集成Dubbo的方式

本博客介绍Springboot框架集成Dubbo实现微服务的3种常用方式,对于Dubbo知识不是很熟悉的,请先学习我上一篇博客:SpringBoot系列之集成Dubbo实现微服务教程,本博客只是对上篇博客的补充,上篇博客已经介绍过的就不重复介绍 还是使用上篇博客的例子,业务场景: 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址: 我们现在 需要创建两个服务模块进行测试 模块 功能 订单服务模块 创建订单等 用户服务模块 查询用户地址等 测试预期结果: 订单服务web模块在A服务器,