dubbo_dubbox - CSDN
精华内容
参与话题
  • 漫谈dubbo分布式服务架构

    万人学习 2018-10-22 21:38:10
    本课程主要是围绕一个小电商系统为案例,帮小伙伴讲解如何基于dubbo搭建分布式服务集群框架。掌握dubbo底层核心原理。 技术交流QQ群:257206349 (加群后可获取课程资料)
  • Dubbo是什么?能做什么?

    万次阅读 多人点赞 2018-12-19 12:46:23
    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的...

    1. Dubbo是什么?

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)
    其核心部分包含:
    1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
    2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
    3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

    2. Dubbo能做什么?

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

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

    之前使用Web Service,我想测试接口可以通过模拟消息的方式通过soapui或LR进行功能测试或性能测试。但现在使用Dubbo,接口之间不能直接交互,我尝试通过模拟消费者地址测试,结果不堪入目,再而使用jmeter通过junit进行测试,但还是需要往dubbo上去注册,如果再不给提供源代码的前提下,这个测试用例不好写啊....

     

    3. dubbo的架构

    dubbo架构图如下所示:

     

     

     

    节点角色说明:

           Provider: 暴露服务的服务提供方。

           Consumer: 调用远程服务的服务消费方。

           Registry: 服务注册与发现的注册中心。

           Monitor: 统计服务的调用次调和调用时间的监控中心。

           Container: 服务运行容器。

    这点我觉得非常好,角色分明,可以根据每个节点角色的状态来确定该服务是否正常。

    调用关系说明:

    0 服务容器负责启动,加载,运行服务提供者。

    1. 服务提供者在启动时,向注册中心注册自己提供的服务。

    2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

    3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

    4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    dubbo的容错性显而易见,性能方面还没有还得及测,我们系统某页面需要掉5次接口,本来想建议做个缓存,但业务关系不能采纳,还需要研究下dubbo的性能调优问题...

    4. dubbo使用方法。

    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.

    1. package com.unj.dubbotest.provider;  
    2.   
    3. import java.util.List;  
    4.   
    5. public interface DemoService {  
    6.   
    7.     String sayHello(String name);  
    8.   
    9.     public List getUsers();  
    10.   
    11. }  


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

     

    1. package com.unj.dubbotest.provider;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.LinkedList;  
    5. import java.util.List;  
    6.   
    7.   
    8. public class DemoServiceImpl implements DemoService{  
    9.       
    10.      public String sayHello(String name) {  
    11.             return "Hello " + name;  
    12.      }  
    13.      public List getUsers() {  
    14.          List list = new ArrayList();  
    15.          User u1 = new User();  
    16.          u1.setName("jack");  
    17.          u1.setAge(20);  
    18.          u1.setSex("男");  
    19.            
    20.          User u2 = new User();  
    21.          u2.setName("tom");  
    22.          u2.setAge(21);  
    23.          u2.setSex("女");  
    24.            
    25.          User u3 = new User();  
    26.          u3.setName("rose");  
    27.          u3.setAge(19);  
    28.          u3.setSex("女");  
    29.            
    30.          list.add(u1);  
    31.          list.add(u2);  
    32.          list.add(u3);  
    33.          return list;  
    34.      }  
    35. }  

     

    用Spring配置声明暴露服务:

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
    5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
    6.         http://www.springframework.org/schema/beans/spring-beans.xsd  
    7.         http://code.alibabatech.com/schema/dubbo  
    8.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
    9.         ">  
    10.    
    11.     <!-- 具体的实现bean -->  
    12.     <bean id="demoService" class="com.unj.dubbotest.provider.DemoServiceImpl" />  
    13.       
    14.     <!-- 提供方应用信息,用于计算依赖关系 -->  
    15.     <dubbo:application name="xixi_provider"  />  
    16.    
    17.     <!-- 使用multicast广播注册中心暴露服务地址   
    18.     <dubbo:registry address="multicast://224.5.6.7:1234" />-->  
    19.     
    20.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
    21.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />   
    22.     
    23.     <!-- 用dubbo协议在20880端口暴露服务 -->  
    24.     <dubbo:protocol name="dubbo" port="20880" />  
    25.    
    26.     <!-- 声明需要暴露的服务接口 -->  
    27.     <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" />  
    28.       
    29. </beans>  

    加载Spring配置,启动服务:

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

     

    服务消费者:

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

     

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

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
    4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
    5.         http://www.springframework.org/schema/beans/spring-beans.xsd  
    6.         http://code.alibabatech.com/schema/dubbo  
    7.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
    8.         ">  
    9.   
    10.     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
    11.     <dubbo:application name="hehe_consumer" />  
    12.   
    13.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
    14.     <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->  
    15.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
    16.   
    17.     <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->  
    18.     <dubbo:reference id="demoService"  
    19.         interface="com.unj.dubbotest.provider.DemoService" />  
    20.   
    21. </beans>  

     

    2.加载Spring配置,并调用远程服务:

    1. package com.alibaba.dubbo.demo.pp;  
    2.   
    3. import java.util.List;  
    4.   
    5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    6.   
    7. import com.unj.dubbotest.provider.DemoService;  
    8.   
    9. public class Consumer {  
    10.   
    11.     public static void main(String[] args) throws Exception {  
    12.         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
    13.                 new String[] { "applicationContext.xml" });  
    14.         context.start();  
    15.   
    16.         DemoService demoService = (DemoService) context.getBean("demoService"); //  
    17.         String hello = demoService.sayHello("tom"); // ִ  
    18.         System.out.println(hello); //   
    19.   
    20.         //   
    21.         List list = demoService.getUsers();  
    22.         if (list != null && list.size() > 0) {  
    23.             for (int i = 0; i < list.size(); i++) {  
    24.                 System.out.println(list.get(i));  
    25.             }  
    26.         }  
    27.         // System.out.println(demoService.hehe());  
    28.         System.in.read();  
    29.     }  
    30.   
    31. }  

    调用结果为:

     

    dubbo管理页面:

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

     

     

     

     

     

    应用页面:

     

     

     

     

    提供者页面:

     

     

     

     

    消费者页面:

     

     

     

     

    服务页面:

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

     

    案例代码下载:http://download.csdn.net/detail/yiyu1/7116319

     

     

     

     

     

     

    敏捷测试团队,不再仅仅是在coding之后。而是和研发人员贯穿在需求分析、规格说明、自动化单元测试、自动化验收测试、静态代码分析、技术债等环节中。所以敏捷项目必定在将来效率的趋势下成为主流。

    展开全文
  • Dubbo入门---搭建一个最简单的Demo框架

    万次阅读 多人点赞 2018-05-09 22:20:04
    Dubbo背景和简介Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本。 缺点:单一的系统...

    Dubbo背景和简介

    Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。

    1. 单一应用框架(ORM)
      当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本。
      缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护
      这里写图片描述

    2. 垂直应用框架(MVC)
      垂直应用架构解决了单一应用架构所面临的扩容问题,流量能够分散到各个子系统当中,且系统的体积可控,一定程度上降低了开发人员之间协同以及维护的成本,提升了开发效率。
      缺点:但是在垂直架构中相同逻辑代码需要不断的复制,不能复用。
      这里写图片描述

    3. 分布式应用架构(RPC)
      当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心
      这里写图片描述

    4. 流动计算架构(SOA)
      随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架

    从以上是电商系统的演变可以看出架构演变的过程:
    这里写图片描述

    • 单一应用架构

      • 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
      • 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
    • 垂直应用架构

      • 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
      • 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
    • 分布式服务架构
      • 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
      • 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
    • 流动计算架构
      • 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
      • 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

    在这里插播一条关于RPC的简介:
    RPC(Remote Procedure Call Protocol):远程过程调用
    两台服务器A、B,分别部署不同的应用a,b。当A服务器想要调用B服务器上应用b提供的函数或方法的时候,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义传达调用的数据。
    说白了,就是你在你的机器上写了一个程序,我这边是无法直接调用的,这个时候就出现了一个远程服务调用的概念。

    RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
    RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

    RPC需要解决的问题:
    (可以稍作了解,详情可查看别的博文)

    • 通讯问题 : 主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
    • 寻址问题 : A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI服务上查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。
    • 序列化 与 反序列化 : 当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。
      同理,B服务器接收参数要将参数反序列化。B服务器应用调用自己的方法处理后返回的结果也要序列化给A服务器,A服务器接收也要经过反序列化的过程。

    Dubbo是什么

    Dubbo是:

    • 一款分布式服务框架
    • 高性能和透明化的RPC远程服务调用方案
    • SOA服务治理方案

    每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。


    Dubbo架构

    这里写图片描述

    Provider: 暴露服务的服务提供方。
    Consumer: 调用远程服务的服务消费方。
    Registry: 服务注册与发现的注册中心。
    Monitor: 统计服务的调用次数和调用时间的监控中心。

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


    Dubbo注册中心

    对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;
    对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
    而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。

    通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。

    Dubbo提供的注册中心有如下几种类型可供选择

    • Multicast注册中心
    • Zookeeper注册中心
    • Redis注册中心
    • Simple注册中心

    Dubbo优缺点

    优点:

    1. 透明化的远程方法调用
      - 像调用本地方法一样调用远程方法;只需简单配置,没有任何API侵入。
    2. 软负载均衡及容错机制
      • 可在内网替代nginx lvs等硬件负载均衡器。
    3. 服务注册中心自动注册 & 配置管理
      -不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。
      使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群。
    4. 服务接口监控与治理
      -Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应用的不同接口,可以进行 多版本,多协议,多注册中心管理。

    缺点:

    • 只支持JAVA语言

    Dubbo入门Demo

    了解了Dubbo以后,自然要搭建一个简单的Demo实现。本文采用Dubbo与Zookeeper、Spring框架的整合。

    主要是以下几个步骤:
    1. 安装Zookeeper,启动;
    2. 创建MAVEN项目,构建Dubbo+Zookeeper+Spring实现的简单Demo;
    3. 安装Dubbo-admin,实现监控。

    1 Zookeeper介绍与安装

    本Demo中的Dubbo注册中心采用的是Zookeeper。为什么采用Zookeeper呢?

    Zookeeper是一个分布式的服务框架,是树型的目录服务的数据存储,能做到集群管理数据 ,这里能很好的作为Dubbo服务的注册中心。

    Dubbo能与Zookeeper做到集群部署,当提供者出现断电等异常停机时,Zookeeper注册中心能自动删除提供者信息,当提供者重启时,能自动恢复注册数据,以及订阅请求

    具体的安装方法在此不一一叙述,可参考博文:
    http://blog.csdn.net/tlk20071/article/details/52028945

    安装完成后,进入到bin目录,并且启动zkServer.cmd,这个脚本中会启动一个java进程:
    (注:需要先启动zookeeper后,后续dubbo demo代码运行才能使用zookeeper注册中心的功能)
    这里写图片描述

    2 创建MAVEN项目

    项目结构:
    主要分三大模块:
    dubbo-api : 存放公共接口;
    dubbo-consumer : 调用远程服务;
    dubbo-provider : 提供远程服务。
    这里写图片描述

    下面将详细叙述代码构建过程。
    1) 首先构建MAVEN项目,导入所需要的jar包依赖。
    需要导入的有spring, dubbo, zookeeper等jar包。
    (详情参看后面提供的项目代码)

    2)创建dubbo-api的MAVEN项目(有独立的pom.xml,用来打包供提供者消费者使用)。
    在项目中定义服务接口:该接口需单独打包,在服务提供方和消费方共享。
    这里写图片描述

    package com.alibaba.dubbo.demo;
    import java.util.List;
    
    public interface DemoService {
        List<String> getPermissions(Long id);
    }

    3)创建dubbo-provider的MAVEN项目(有独立的pom.xml,用来打包供消费者使用)。
    实现公共接口,此实现对消费者隐藏:

    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<String> getPermissions(Long id) {
            List<String> demo = new ArrayList<String>();
            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;
        }
    }

    需加入公共接口所在的依赖
    这里写图片描述

    用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-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
        <dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/>
        <!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
        <dubbo:registry address="zookeeper://localhost:2181"/>
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol name="dubbo" port="20880" />
        <!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
        <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" protocol="dubbo" />
        <!--具体实现该接口的 bean-->
        <bean id="demoService" class="com.alibaba.dubbo.demo.impl.DemoServiceImpl"/>
    </beans>

    启动远程服务:

    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();
            }
        }

    4)创建dubbo-consumer的MAVEN项目(可以有多个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="demotest-consumer" owner="programmer" organization="dubbox"/>
        <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
        <dubbo:registry address="zookeeper://localhost:2181"/>
        <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
        <dubbo:reference id="permissionService" interface="com.alibaba.dubbo.demo.DemoService"/>
    </beans>

    启动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)运行项目,先确保provider已被运行后再启动consumer模块:
    运行提供者:
    这里写图片描述
    消费者成功调用提供者所提供的远程服务:
    这里写图片描述

    当然,这只是一个模拟的项目,实际中有多提供者多消费者情况,比这要复杂的多,当然只有这样才能体现dubbo的特性。


    Dubbo管理控制台介绍

    管理控制台功能

    路由规则,动态配置,服务降级
    访问控制,权重调整
    负载均衡
    这里写图片描述

    下载dubbo-admin,可自行根据网上介绍安装。大致做法就是将dubbo-admin中 的某个文件夹内容替换到tomcat的conf中,再运行tomcat即可。但我在实际操作中发现JDK8无法运行,后来找到一个JDK8可以实现的dubbo-admin版本,下载地址:http://www.itmayun.com/it/files/226631678709806/resource/901920001882583/1.html

    成功开启输入用户名密码root后,即可进入控制台首页查看消费者提供者情况:
    查看提供者:
    这里写图片描述
    查看消费者:
    这里写图片描述

    目前,阿里又开始更新,有兴趣可以查看:
    https://github.com/apache/incubator-dubbo

    整个项目的代码已经上传到我的github上https://github.com/nomico271/DatatablesDemo.git,欢迎查看。
    (github上项目中的图片为博客中内容,可全部删除)。

    参考:https://www.zhihu.com/question/25536695

    展开全文
  • dubbo快速入门

    万次阅读 多人点赞 2018-08-21 13:53:23
    一、dubbo基本原理 dubbo架构图如下: 节点角色说明 调用关系说明: 0.服务容器负责启动,加载,运行服务提供者。 1.服务提供者在启动时,向注册中心注册自己提供的服务。 2.服务消费者在启动时,向注册...

    一、dubbo基本原理

    dubbo架构图如下:

    enter image description here

    节点角色说明

    enter image description here

    调用关系说明:

    0.服务容器负责启动,加载,运行服务提供者。

    1.服务提供者在启动时,向注册中心注册自己提供的服务。

    2.服务消费者在启动时,向注册中心订阅自己所需的服务。

    3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

    4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    具体详细内容请参加dubbo官方文档

    http://dubbo.apache.org/en-us/
    

    二、入门demo简介

    该demo包含三个项目,分别是:

    服务提供端项目:provider

    服务消费端项目:consumer

    共用服务接口项目:api

    依赖关系如图:

    enter image description here

    api项目是一个jar项目,将生成的jar打包到maven仓库,作为provider和consumer项目的依赖导入。

    三、dubbo-远程调用(RPC)具体实现

    1、启动zookeeper

    在启动服务提供者项目之前要先启动zookeeper,因为我们需要把服务提供方注册到zookeeper中,然后才能被服务消费方发现并调用。

    关于zookeeper这里不做详细介绍了,简单概括就是分布式服务治理框架,用于服务注册与发现,实现远程调用功能等。

    • zookeeper下载

      http://zookeeper.apache.org/

    • 解压并修改配置

    zookeeper下载完成后解压到合适目录,然后进入到zookeeper的conf目录,找到zoo_sample.cfg文件将其重命名为zoo.cfg,然后打开该文件, 将其中的dataDir和dataLogDir修改如下:

    dataDir=E:\\Soft\\zookeeper-3.4.6\\data
    dataLogDir=E:\\Soft\\zookeeper-3.4.6\\log
    

    修改为你本地硬盘的目录

    • 启动zookeeper

    进入到zookeeper的bin目录下,双击zkServer.cmd,启动zookeeper

    2.dubbo接口服务api项目

    新建maven项目api,注意将其pom.xml中的打包方式改为jar

    然后在com.dubbo.api.service包下新建DemoService接口,如下:

    public interface DemoService {
    
        String sayHello(String name);
    }
    

    项目结构如图:

    enter image description here

    然后将项目打包(install一下即可),在E:\temp\api\target\目录下找到该jar,然后打包到本地maven仓库,打开cmd命令窗口,输入以下令如下:

    mvn install:install-file -Dfile=E:\temp\api\target\api.jar -DgroupId=com.dubbo.api -DartifactId=api -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true
    

    注意:jar路径该为你自己的路径

    3.dubbo服务提供者provider项目

    新建maven项目provider,并在pom.xml中添加以下依赖:

     <dependency>
      <groupId>com.dubbo.api</groupId>
      <artifactId>api</artifactId>
      <version>1.0.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.5.3</version>
    </dependency>
    
    <dependency>
      <groupId>com.101tec</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.10</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.0.5.RELEASE</version>
    </dependency>
    

    这里引入了上面的生成的api接口依赖、dubbo依赖、zookeeper客服端依赖以及启动项目必需的依赖

    然后在com.dubbo.provider.service.impl包下新建DemoServiceImp并实现DemoService接口,如下:

    public class DemoServiceImpl implements DemoService{
    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
    

    然后在resources下新建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-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
    <dubbo:application name="demo-provider" owner="wly" organization="dubbox"/>
    <!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
    <dubbo:service interface="com.dubbo.api.service.DemoService" ref="demoService" protocol="dubbo" />
    <!--具体实现该接口的 bean-->
    <bean id="demoService" class="com.dubbo.provider.service.impl.DemoServiceImpl"/>
    </beans>
    

    然后在java下直接新建Provider用于启动项目:

    public class Provider {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
        context.start();
        System.out.println("dubbo服务提供端已启动....");
        System.in.read(); // 按任意键退出
    }
    }
    

    provider项目结构如图:

    enter image description here

    然后直接运行该main函数-dubbo服务提供者已启动!

    4.dubbo服务消费者consumer项目

    新建maven项目consumer,并在pom.xml中添加以下依赖:

     <dependency>
      <groupId>com.dubbo.api</groupId>
      <artifactId>api</artifactId>
      <version>1.0.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.5.3</version>
    </dependency>
    <dependency>
      <groupId>com.101tec</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.10</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.0.5.RELEASE</version>
    </dependency>
    

    和provider项目添加的依赖一样。

    然后在resources下新建comsumer.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="demo-consumer" owner="wly" organization="dubbox"/>
    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
    <dubbo:reference id="demoService" interface="com.dubbo.api.service.DemoService"/>
    </beans>
    

    然后在java下新建Consumer.class用于启动该项目,如下:

    public class Consumer {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "consumer.xml" );
        context.start();
        System.out.println("dubbo服务消费端已启动...");
        DemoService demoService = (DemoService)context.getBean( "demoService" );// 获取远程服务代理
        String hello = demoService.sayHello( "world" );//执行远程方法
        System.out.println(hello);//显示调用结果
        System.in.read(); // 按任意键退出
    }
    }
    

    启动该项目,显示调用结果,如图:

    enter image description here

    到这里就已经完成了dubbo的远程调用。下面介绍下dubbo-admin管理控制台

    四、dubbo-admin管理控制台

    通过dubbo-admin可以更好的管理dubbo服务。

    首先下载dubbo-admin的war包,下载地址:

    http://www.java1234.com/a/javabook/javaweb/2018/0224/10496.html
    

    下载完成后,将dubbo-admin-2.6.0.war复制到tomcat的webapps目录下。然后启动tomcat,访问

    http://localhost:8080/dubbo-admin-2.6.0/
    

    也可以将dubbo-admin-2.6.0重命名为dubbo-admin访问的时候直接访问http://localhost:8080/dubbo-admin即可

    用户名和密码都是root

    登录后就可以通过网页进行管理dubbo服务了,如图:

    enter image description here

     

    该demo项目以及相关资源下载链接

    dubbo-demo

    访问我的达人课

    访问我的博客 Wang's Blog

    展开全文
  • 比较spring cloud和dubbo,各自的优缺点是什么

    万次阅读 多人点赞 2019-10-24 21:13:18
    dubbo由于是二进制的传输,占用带宽会更少 springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大 dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决 ...


    dubbo由于是二进制的传输,占用带宽会更少

    springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大

    dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决

    springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级

    dubbo的注册中心可以选择zk,redis等多种,springcloud的注册中心只能用eureka或者自研


    但如果我选,我会用springcloud。

    从公司整体规划:我不会选择很久没人维护的dubbo,重启之后也未必是原班人马

    从程序员招聘难度:招springcloud的程序员会更好招,因为更新更炫

    从系统结构简易程序:springcloud的系统结构更简单、“注册+springmvc=springcloud”,而dubbo各种复杂的Url,protocol,register,invocation,dubbofilter,dubboSPI,dubbo序列化..........炫技的成分更多一些

    从性能:dubbo的网络消耗小于springcloud,但是在国内95%的公司内,网络消耗不是什么太大问题,如果真的成了问题,通过压缩、二进制、高速缓存、分段降级等方法,很容易解

    从开发难易度:dubbo的神坑是jar包依赖,开发阶段难度极大,我曾经带一个三十人的团队,因为jar包升级问题,把每个人的电脑都操作过,尤其每个人电脑的库路径、命令、快捷键、键盘,鼠标快慢都不一样,那会儿我默默的在心中艹了dubbo发明者全家老小一百二十遍。springcloud比较自由,但带来的问题是无法“强力约束接口规范”,建议用行政方式解决,且我们团队的强力行政约束做的还是比较好的,在接口管控层面比较强效,一个没有行政组织能力的IT团队真的是个废渣,用什么框架都不好使。

    从后续改进:dubbo的改进是通过dubbofilter,很多东西没有,需要自己继承,如监控,如日志,如限流,如追踪。springcloud自己带了很多监控、限流措施,但是功能可能和欧美习惯相同,国内需要进行适当改造,但更简单,就是ServletFilter而已,但是总归比dubbo多一些东西是好的

    从配套措施:springcloud一直宣称自己是“一套全方面的解决方案”。。。。。。我起初信了,后来发现上当了,实话说:有,但是不是很健全,100分打50的样子,很多你还需要改造。而DUBBO相反,一直宣称自己是“一套全方面的服务化方案”。。。。。。纯服务化顶个鸟用,任何系统都是相辅相成配套的,一个完整的系统,要有前台、中台、后台、前台包括前端和交互,中台包括交易、任务、数据,后台包括财务、账户、管理...........单纯的服务化解决不了“任何问题”,唯有体系才能解决。在这个层面,springcloud是个往“体系”方向发展的方案,而dubbo仅是个工具而已,两者相比,就好比始祖鸟与草履虫的区别。

    从技术实力层面:对比双方的源码,不得不说dubbo作者的技术能力要高于springCloud,而springBoot的作者技术能力要高于dubbo。即:springboot>dubbo>springcloud。我喜欢springboot这种大道至简的风格,keep it simple and stupid。而dubbo好嘛......你先看看dubboSPI,再看看Protocol$Adpative里面那一群绕来绕去的瞎几把绕的玩意儿,你会迅速判断出:这群屌丝在炫技。尽管dubbo从上之下分为十层四五十个组件,第一感官上是哇塞好全面好伟大的样子,但深入之后你会觉得,这技术是很炫,设计的确实很全面,但是用不到,例如:请各位大神给我解释一下,在zookeeper地址中,使用逗号分隔和分号分隔地址的区别。。。。。用途不大,但是代码里为了这个就走向了“完全不同”的一条分支。用俗语评价,就是“臃肿且无用代码过多,在文档里还非得为了这个说出123456来”。说完dubbo再说springCloud........它没有技术含量,完全没有,就是一堆简单组件拼装在一起,如configserver、eurekaserver、robin、feignClient、htstrix等,每个都特别简单,没什么技术含量,但我喜欢这种的,就喜欢这种大道至简的简单。

    最后说springBoot,我要用“纯粹”两个字来评价这个框架,真的很纯粹,并且从其代码架构的总体思路一致性,目标的纯粹性,具体模块的干净利落,确实是个好框架,值得大家一读。

    从系统应用层面:在技术实力满分一百能打85分的鄙人的眼中,dubbo和springcloud,不就是两个框架么?我们是要拯救世界的人,这俩块鹅卵石一块圆的一块方的,能垫脚就行,没有区别。

     

     

    简而言之,Dubbo确实类似于Spring Cloud的一个子集,Dubbo功能和文档完善,在国内有很多的成熟用户,然而鉴于Dubbo的社区现状(曾经长期停止维护,2017年7月31日团队又宣布重点维护),使用起来还是有一定的门槛。

    Dubbo具有调度、发现、监控、治理等功能,支持相当丰富的服务治理能力。Dubbo架构下,注册中心对等集群,并会缓存服务列表已被数据库失效时继续提供发现功能,本身的服务发现结构有很强的可用性与健壮性,足够支持高访问量的网站。

    虽然Dubbo 支持短连接大数据量的服务提供模式,但绝大多数情况下都是使用长连接小数据量的模式提供服务使用的。所以,对于类似于电商等同步调用场景多并且能支撑搭建Dubbo 这套比较复杂环境的成本的产品而言,Dubbo 确实是一个可以考虑的选择。但如果产品业务中由于后台业务逻辑复杂、时间长而导致异步逻辑比较多的话,可能Dubbo 并不合适。同时,对于人手不足的初创产品而言,这么重的架构维护起来也不是很方便。

    Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。比如使用Spring Cloud Config 可以实现统一配置中心,对配置进行统一管理;使用Spring Cloud Netflix 可以实现Netflix 组件的功能 - 服务发现(Eureka)、智能路由(Zuul)、客户端负载均衡(Ribbon)。

    但它并没有重复造轮子,而是选用目前各家公司开发的比较成熟的、经得住实践考验的服务框架(我们需要特别感谢Netflix ,这家很早就成功实践微服务的公司,几年前把自家几乎整个微服务框架栈贡献给了社区,Spring Cloud主要是对Netflix开源组件的进一步封装),通过Spring Boot 进行封装集成并简化其使用方式。基于Spring Boot,意味着其使用方式如Spring Boot 简单易用;能够与Spring Framework、Spring Boot、Spring Data 等其他Spring 项目完美融合,意味着能从Spring获得巨大的便利,意味着能减少已有项目的迁移成本

    其实,从社区活跃度和功能完整度,再对照业务需求和团队状况,基本可以确定如何选型。这里分享网易考拉海购实践以及团队选型的心声:

    当前开源上可选用的微服务框架主要有Dubbo、Spring Cloud等,鉴于Dubbo完备的功能和文档且在国内被众多大型互联网公司选用,考拉自然也选择了Dubbo作为服务化的基础框架。其实相比于Dubbo,Spring Cloud可以说是一个更完备的微服务解决方案,它从功能性上是Dubbo的一个超集,个人认为从选型上对于一些中小型企业Spring Cloud可能是一个更好的选择。提起Spring Cloud,一些开发的第一印象是http+JSON的rest通信,性能上难堪重用,其实这也是一种误读。
    微服务选型要评估以下几点:内部是否存在异构系统集成的问题;备选框架功能特性是否满足需求;http协议的通信对于应用的负载量会否真正成为瓶颈点(Spring Cloud也并不是和http+JSON强制绑定的,如有必要Thrift、protobuf等高效的RPC、序列化协议同样可以作为替代方案);社区活跃度、团队技术储备等。作为已经没有团队持续维护的开源项目,选择Dubbo框架内部就必须要组建一个维护团队,先不论你要准备要集成多少功能做多少改造,作为一个支撑所有工程正常运转的基础组件,问题的及时响应与解答、重大缺陷的及时修复能力就已足够重要。

    详见网易考拉海购Dubbok框架优化详解

     

    鉴于服务发现对服务化架构的重要性,再补充一点:Dubbo 实践通常以ZooKeeper 为注册中心(Dubbo 原生支持的Redis 方案需要服务器时间同步,且性能消耗过大)。针对分布式领域著名的CAP理论(C——数据一致性,A——服务可用性,P——服务对网络分区故障的容错性),Zookeeper 保证的是CP ,但对于服务发现而言,可用性比数据一致性更加重要 ,而 Eureka 设计则遵循AP原则

    为什么选择使用Spring Cloud而放弃了Dubbo

    可能大家会问,为什么选择了使用Dubbo之后,而又选择全面使用Spring Cloud呢?其中有几个原因:

    1)从两个公司的背景来谈:Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;Spring Cloud是大名鼎鼎的Spring家族的产品。阿里巴巴是一个商业公司,虽然也开源了很多的顶级的项目,但从整体战略上来讲,仍然是服务于自身的业务为主。Spring专注于企业级开源框架的研发,不论是在中国还是在世界上使用都非常广泛,开发出通用、开源、稳健的开源框架就是他们的主业。

    2)从社区活跃度这个角度来对比,Dubbo虽然也是一个非常优秀的服务治理框架,并且在服务治理、灰度发布、流量分发这方面做的比Spring Cloud还好,除过当当网在基础上增加了rest支持外,已有两年多的时间几乎都没有任何更新了。在使用过程中出现问题,提交到github的Issue也少有回复。

    相反Spring Cloud自从发展到现在,仍然在不断的高速发展,从github上提交代码的频度和发布版本的时间间隔就可以看出,现在Spring Cloud即将发布2.0版本,到了后期会更加完善和稳定。

    3) 从整个大的平台架构来讲,dubbo框架只是专注于服务之间的治理,如果我们需要使用配置中心、分布式跟踪这些内容都需要自己去集成,这样无形中使用dubbo的难度就会增加。Spring Cloud几乎考虑了服务治理的方方面面,更有Spring Boot这个大将的支持,开发起来非常的便利和简单。

    4)从技术发展的角度来讲,Dubbo刚出来的那会技术理念还是非常先进,解决了各大互联网公司服务治理的问题,中国的各中小公司也从中受益不少。经过了这么多年的发展,互联网行业也是涌现了更多先进的技术和理念,Dubbo一直停滞不前,自然有些掉队,有时候我个人也会感到有点可惜,如果Dubbo一直沿着当初的那个路线发展,并且延伸到周边,今天可能又是另一番景象了。

    Spring 推出Spring Boot/Cloud也是因为自身的很多原因。Spring最初推崇的轻量级框架,随着不断的发展也越来越庞大,随着集成项目越来越多,配置文件也越来越混乱,慢慢的背离最初的理念。随着这么多年的发展,微服务、分布式链路跟踪等更多新的技术理念的出现,Spring急需一款框架来改善以前的开发模式,因此才会出现Spring Boot/Cloud项目,我们现在访问Spring官网,会发现Spring Boot和Spring Cloud已经放到首页最重点突出的三个项目中的前两个,可见Spring对这两个框架的重视程度。

    总结一下,dubbo曾经确实很牛逼,但是Spring Cloud是站在近些年技术发展之上进行开发,因此更具技术代表性。

    spring cloud整机,dubbo需要自己组装;整机的性能有保证,组装的机子更自由。

     

    展开全文
  • dubbo面试题大全

    2018-09-03 20:51:21
    1、默认使用的是什么通信框架,还有别的选择吗?   默认也推荐使用netty框架,还有mina。   2、服务调用是阻塞的吗?  ... 默认是阻塞的,可以异步调用,没有返回值的可以这么做。...4、默认使用什么序列化框架,你...
  • 1.Java中的io流面试题 什么是流?流分为哪几种? 答案:我给你打个比方你就明白了;比如你家的水龙头的管道就是一个流:流又分为输入输出流,输入流就是你家水龙头抽水库水的那头,输出流就是你家水龙头流到你家大...
  • 面试题

    2020-09-17 16:44:07
    2019史上最全java面试题题库大全800题含答案(面试宝典) 1、 meta标签的作用是什么 2、 ReenTrantLock可重入锁(和synchronized的区别)总结 3、 Spring中的自动装配有哪些限制? 4、 什么是可变参数?...
  • Dubbo(一)——Dubbo及注册中心原理

    万次阅读 多人点赞 2018-09-02 18:29:20
    1.Dubbo意义 网站应用的架构变化经历了一个从所有服务分布在一台服务器上(All in one 、单一应用架构)到 垂直应用架构 (MVC模式,按照各模块的职能划分)到分布式应用架构(RPC、按照服务不同分布在不同的...
  • Dubbo-Dubbo 动态配置中心

    万次阅读 2019-07-14 15:50:43
    Dubbo 动态配置中心 一、参考文档 http://dubbo.apache.org/zh-cn/docs/user/configuration/config-center.html 三大中心指的:注册中心,元数据中心,配置中心。在 2.7 之前的版本,Dubbo 只配备了注册中心,主流...
  • dubbo的底层原理

    万次阅读 多人点赞 2018-07-02 19:12:12
    Dubbo是一种分布式服务框架。 Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提供服务之外,还可以实现软负载均衡。它还提供了两个功能Monitor...
  • Dubbo学习(三)- Dubbo的管理控制台dubbo-admin

    万次阅读 热门讨论 2018-04-09 14:55:08
    下载dubbo-admin 前往github上下载dubbo-admin:https://github.com/apache/incubator-dubbo/tree/dubbo-2.6.0 注意:dubbo-2.6.1以后的版本不再有dubbo-admin incubator-dubbo-dubbo-2.6.0.zip,右键》解压...
  • 公司项目用的通信框架式dubbo,想知道为什么用dubbo基于什么考虑,他有什么优点或者好处?
  • 把端口号改为字符串类型!!!!
  • dubbo 用户名密码问题

    万次阅读 2016-06-29 11:05:03
    dubbo-admin 用户名,密码问题
  • Dubbo限制大数据传输的解决方案

    万次阅读 2017-02-23 16:31:23
    dubbo服务提供层向消费层传输大数据容量的对象时,会受到Dubbo的限制,报类似如下异常: com.alibaba.dubbo.remoting.transport.AbstractCodec.checkPayload() ERROR Data length too large: 11557050, max...
  • Dubbo消费者超时时间配置

    万次阅读 2018-07-09 14:14:18
    新增微服务拆分服务,上线后发现调用者出现 dubbo - timeout 超时服务。client elapsed: 0 ms, server elapsed: 1159 ms, timeout: 1000 ms。超时时间是1s,看了自己的消费者服务配置没有问题,配置的消费的timeout...
  • 以前在同一模块中Spring依赖注入,可以通过@Service和@Autowired Dubbo是远程服务调用,...dubbo:reference、dubbo:service <dubbo:service interface="fei.CustomerServices" ref="customerServices"/> ...
  • dubbo线程池溢出解决

    千次阅读 2017-08-25 09:30:56
    dubbo 线程池
  • 最近跟着视频学电商项目,里面用到了dubbo和activemq. 其中activeMQ是为了降低服务和服务之间调用的耦合度的。 我就想既然能这样,为什么前面还要用dubbo进行工程之间的通信呢。 想问下,dubbo和activemq之间的区别...
1 2 3 4 5 ... 20
收藏数 106,911
精华内容 42,764
关键字:

dubbo