Dubbo是什么?

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)
其核心部分包含:

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

Dubbo能做什么?

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

Dubbo的架构

Dubbo架构图如下所示:

节点角色说明:

节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

Dubbo执行流程:

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

Dubbo集成

1、Dubbo+Zookeeper+Spring

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

下面我们就来看看spring配置方式的写法:

服务提供者:

1. 下载zookeeper注册中心,下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/  下载后解压即可,进入D:\apach-zookeeper-3.4.5\bin,

双击zkServer.cmd启动注册中心服务。

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

下面这个例子不错,写的很详细可以做个model.


package com.unj.dubbotest.provider;  import java.util.List;  public interface DemoService {  String sayHello(String name);  public List getUsers();  } 

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

package com.unj.dubbotest.provider;  import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;  public class DemoServiceImpl implements DemoService{  public String sayHello(String name) {  return "Hello " + name;  }  public List getUsers() {  List list = new ArrayList();  User u1 = new User();  u1.setName("jack");  u1.setAge(20);  u1.setSex("男");  User u2 = new User();  u2.setName("tom");  u2.setAge(21);  u2.setSex("女");  User u3 = new User();  u3.setName("rose");  u3.setAge(19);  u3.setSex("女");  list.add(u1);  list.add(u2);  list.add(u3);  return list;  }
}  

用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  ">  <!-- 具体的实现bean -->  <bean id="demoService" class="com.unj.dubbotest.provider.DemoServiceImpl" />  <!-- 提供方应用信息,用于计算依赖关系 -->  <dubbo:application name="xixi_provider"  />  <!-- 使用multicast广播注册中心暴露服务地址   <dubbo:registry address="multicast://224.5.6.7:1234" />-->  <!-- 使用zookeeper注册中心暴露服务地址 -->  <dubbo:registry address="zookeeper://127.0.0.1:2181" />   <!-- 用dubbo协议在20880端口暴露服务 -->  <dubbo:protocol name="dubbo" port="20880" />  <!-- 声明需要暴露的服务接口 -->  <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" />  </beans> 

加载Spring配置,启动服务:

package com.unj.dubbotest.provider;  import org.springframework.context.support.ClassPathXmlApplicationContext;  public class Provider {  public static void main(String[] args) throws Exception {  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});  context.start();  System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟  }  }  

服务消费者:

 applicationContext-dubbo.xml 中注册自己需要调用的接口,我刚开始测试的时候需要的接口很多,所以把这个文件写的满满的,后来熟悉了把接口按业务类型分开,写了N多个 applicationContext-dubbo-***.xml 简练多了 》。

1.通过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="hehe_consumer" />  <!-- 使用zookeeper注册中心暴露服务地址 -->  <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->  <dubbo:registry address="zookeeper://127.0.0.1:2181" />  <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->  <dubbo:reference id="demoService"  interface="com.unj.dubbotest.provider.DemoService" />  </beans>  2.加载Spring配置,并调用远程服务:package com.alibaba.dubbo.demo.pp;  import java.util.List;  import org.springframework.context.support.ClassPathXmlApplicationContext;  import com.unj.dubbotest.provider.DemoService;  public class Consumer {  public static void main(String[] args) throws Exception {  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  new String[] { "applicationContext.xml" });  context.start();  DemoService demoService = (DemoService) context.getBean("demoService"); //  String hello = demoService.sayHello("tom"); // ִ  System.out.println(hello); //   //   List list = demoService.getUsers();  if (list != null && list.size() > 0) {  for (int i = 0; i < list.size(); i++) {  System.out.println(list.get(i));  }  }  // System.out.println(demoService.hehe());  System.in.read();  }  }  

调用结果为:

dubbo管理页面:

这个管理页面还需要部署一个环境的,一开始我还以为是dubbo自带的,找了半天没有找到....

应用页面:

提供者页面:

消费者页面:

服务页面:

测试是否成功,我觉得只要看看状态是否正常,就ok了 ....

备注:以上博文来自   Romantic_321 地址:https://blog.csdn.net/Romantic_321/article/details/81231225

以上dubbo是

采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。

如果不想使用 Spring 配置,可以通过 API 的方式 进行调用(dubbo.io  dubbo官网有)。

DUBBO   schema配置手册:(只展示部分参数,其余可选参照dubbo官网  dubbo.io)

1.dubbo:service  服务提供者暴露服务配置。

属性 对应URL参数 类型 是否必填 缺省值 作用 描述 兼容性
interface class 必填 服务发现 服务接口名 1.0.0以上版本
ref object 必填 服务发现 服务对象实现引用 1.0.0以上版本

2.dubbo:reference  服务消费者引用服务配置。

属性 对应URL参数 类型 是否必填 缺省值 作用 描述 兼容性
id string 必填 配置关联 服务引用BeanId 1.0.0以上版本
interface class 必填 服务发现 服务接口名 1.0.0以上版本

3.dubbo:protocol  服务提供者协议配置。

如果需要支持多协议,可以声明多个 <dubbo:protocol> 标签,并在 <dubbo:service> 中通过 protocol 属性指定使用的协议。

属性 对应URL参数 类型 是否必填 缺省值 作用 描述 兼容性
id string 可选 dubbo 配置关联 协议BeanId,可以在<dubbo:service protocol="">中引用此ID,如果ID不填,缺省和name属性值一样,重复则在name后加序号。 2.0.5以上版本
name <protocol> string 必填 dubbo 性能调优 协议名称 2.0.5以上版本
port <port> int 可选 dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;如果没有配置port,则自动采用默认端口,如果配置为-1,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控。 服务发现 服务端口 2.0.5以上版本

4.dubbo:registry  注册中心配置

同时如果有多个不同的注册中心,可以声明多个 <dubbo:registry> 标签,并在 <dubbo:service> 或 <dubbo:reference> 的 registry 属性指定使用的注册中心。

属性 对应URL参数 类型 是否必填 缺省值 作用 描述 兼容性
id string 可选 配置关联 注册中心引用BeanId,可以在<dubbo:service registry="">或<dubbo:reference registry="">中引用此ID 1.0.16以上版本
address <host:port> string 必填 服务发现 注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册中心,请配置多个<dubbo:registry>标签 1.0.16以上版本

5.dubbo:monitor  监控中心配置。

属性 对应URL参数 类型 是否必填 缺省值 作用 描述 兼容性
protocol protocol string 可选 dubbo 服务治理 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心。 2.0.9以上版本
address <url> string 可选 N/A 服务治理 直连监控中心服务器地址,address="10.20.130.230:12080" 1.0.16以上版本

6.dubbo:application  应用信息配置。

属性 对应URL参数 类型 是否必填 缺省值 作用 描述 兼容性
name application string 必填 服务治理 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样,此参数不是匹配条件,你当前项目叫什么名字就填什么,和提供者消费者角色无关,比如:kylin应用调用了morgan应用的服务,则kylin项目配成kylin,morgan项目配成morgan,可能kylin也提供其它服务给别人使用,但kylin项目永远配成kylin,这样注册中心将显示kylin依赖于morgan 1.0.16以上版本

7.dubbo:module  模块信息配置。

属性 对应URL参数 类型 是否必填 缺省值 作用 描述 兼容性
name module string 必填 服务治理 当前模块名称,用于注册中心计算模块间依赖关系 2.2.0以上版本

8.dubbo:provider  服务提供者缺省值配置。

同时该标签为 <dubbo:service> 和 <dubbo:protocol> 标签的缺省值设置。

9.dubbo:consume  服务消费者缺省值配置

同时该标签为 <dubbo:reference> 标签的缺省值设置。

10.dubbo:method  方法级配置。

同时该标签为 <dubbo:service> 或 <dubbo:reference> 的子标签,用于控制到方法级。

dubbo  协议:   具体看dubbo官网

dubbo 注册中心:具体参照官网手册

Dubbo是什么?能做什么?架构图?相关推荐

  1. Word小技巧:秒做组织架构图,让你一目了然各部门相互关系

    今天我们来分享一下word怎么做组织架构图,那么,什么是组织架构图呢?它是表现雇员.职称和群体关系的一种图表,形象的反映了组织内各机构.岗位和上下左右相互之间的关系.一个架构图就能一目了然各个部门之间 ...

  2. vue-orgchart做组织架构图

    Vue-orgchart链接地址 <!DOCTYPE html> <html lang="en"><head><meta charset= ...

  3. 使用jOrgChart插件, 异步加载生成组织架构图

    项目要做组织架构图,要把它做成自上而下的树形结构,于是决定 (1)通过后台查询数据库,生成树形数组结构,返回到前台. (2)使用jOrgChart插件,根据返回的数据将其子节点加入到相应的<li ...

  4. 智能工厂系统架构图_一些智能化弱电系统架构图,做方案可以用

    前言: 大家好,我是薛哥.很多人对于每个行业的系统架构不太了解,今天汇总了一些主要方案的系统架构图,希望对新人有所帮助. 正文: 1.智慧社区智能化弱电系统解决方案,主要包含可视对讲系统.周界防范系统 ...

  5. 面试官:你给我画一下秒杀系统的架构图!

    泪目,不堪回首! 博主毕业4年了,最近秋招开始了,每次回想起自己的秋招,都感觉到当时自己特别的可惜(菜是原罪),自己当时简历上面的项目,只有一个 农资电商平台,当时的秒杀系统还没有那么普及(简历人均秒 ...

  6. 如何画出优秀的软件架构图?

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...

  7. 程序员必备技能:如何画好架构图?

    目录 先厘清一些基础概念 1.什么是架构 2.什么是架构图 3.架构图的作用 4.架构图分类 怎样的架构图是好的架构图 画架构图遇到的常见问题 1.方框代表什么? 2.虚线.实线什么意思?箭头什么意思 ...

  8. mysql 按月和年累加_MySQL架构图

    在学习一项新东西时,先从宏观上有个整体的把握,然后循序渐进,逐渐掌握各个细节.按照这个方法论,先记录一下mysql数据库整体架构图. 一.整体架构图 相对完整的逻辑体系架构: 抽象出重要组件,更简易化 ...

  9. 如何画出优秀的架构图?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 三画 来源 | 公众号「阿里巴巴云原生」 导读:技术传播 ...

  10. 阿里巴巴的技术专家,是如何画好架构图的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:阿里巴巴中间件 技术传播的价值,不仅仅体现在通过商业化产品和 ...

最新文章

  1. Shell的作用与分类
  2. 算法-二叉树中的最大路径和
  3. 五相同步电机matlab模型,五相永磁同步电机空间矢量PWM控制系统MATLAB仿真
  4. C#期末考试题,图书系统
  5. 美国无人驾驶立法提案将进行投票,有望解除一切封杀
  6. Linux中Shell循环结构for用法笔记
  7. JQ css3 导航栏到底部上移
  8. 第一个MVVM wp7程序
  9. java正立三角形_java for循环练习(9*9乘法表、正三角形、菱形)
  10. Java SE 第二十三讲----static关键字and final关键字
  11. Altium AD20修改原理图右下角标题栏,自定义标题栏,添加图片、标题、页码、时间、作者
  12. 计算机在车联网的应用,刘小洋, 伍民友. 车联网: 物联网在城市交通网络中的应用[J]. 计算机应用, 2012, 32(4): 900-904....
  13. 几个危险的扩展存储过程
  14. 按键精灵手机助手旋转验证码上传插件
  15. 51单片机---IE寄存器,TCON寄存器,TMOD寄存器
  16. mathtype下载之后word工具栏不出现
  17. ASP.NET MVC5中局部视图的更新
  18. SLG手游的战斗抽象
  19. 恶意软件横行无忌 DNS“功”不可没
  20. JSP_EL_JTEL

热门文章

  1. 长期执业的顶尖领先律所ROSEN提醒Mylan N.V.投资者注意MYL证券集体诉讼的重要截止日期为8月25日
  2. python实现关键词搜索
  3. [附源码]Java计算机毕业设计SSM城市公交系统
  4. java单线程刷功德程序
  5. 如何购买华为服务器+云计算特点
  6. expert个人版 sqlite_SQLite Expert Personal下载
  7. redis-GEO地理位置
  8. TCP与UDP协议初步学习——网络环境中分布式进程通信的基本概念
  9. 持续造风,快手为品牌、商家提供“保姆式”服务
  10. 2021年学web前端需要什么学历?