精华内容
下载资源
问答
  • Dubbo入门详细教程

    2021-12-28 14:57:24
    什么是DubboDubbo 是阿里开源的远程服务调用(RPC)的分布式框架,提供了 SOA 服务治理方案;它的架构主要有五个角色/核心组件,分为是 Container(容器)、Provider(服务的提供方)、Registry(注册中心)、Consumer...

    什么是Dubbo?

    Dubbo 是阿里开源的远程服务调用(RPC)的分布式框架,提供了 SOA 服务治理方案;它的架构主要有五个角色/核心组件,分为是 Container(容器)、Provider(服务的提供方)、Registry(注册中心)、Consumer(服务的消费方)、Monitor(监控中心)

    容器主要负责启动、加载、运行服务提供者;

    同时服务提供者在启动时,向注册中心注册自己提供的服务;

    消费者向注册中心订阅自己的服务;注册中心返回服务提供者列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者;

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

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

    在这里插入图片描述

    Dubbo 在项目中主要用来实现不同系统之间的服务调用,由于项目是按照不同的功能分了不同的系统,按照三层架构又分了不同的服务,其中三层架构中的控制层作为服务的消费方,业务层和持久层共同作为服务的发布方,这样的架构实现了系统的服务化,提高了开发效率,实现了业务的解耦。

    项目中通过 Dubbo 和 Spring 的整合,采用全 Spring 配置方式,只需要用 Spring 来加载Dubbo 的配置,完成了服务的发布和调用。

    我们主要在服务的暴露方通过dubbo:service标签来暴露服务,在服务的消费方通过dubbo:reference标签来引用服务,注册中心我们选用的是 zookeeper,对服务的URL进行了管理和配置。

    Dubbo 支持 Dubbo 协议、RMI 协议、hessian 协议、Http 协议等。

    Dubbo 协议:缺省协议、采用了单一长连接和 NIO 异步通讯、使用线程池并发处理请求,能减少握手和加大并发效率、采用的是 Hession 二进制序列化、性能较好,推荐使用。

    主要应用于传入传出参数数据包较小(建议小于 100K),消费者比提供者个数多,由于是单一连接,因为尽量不要传输大文件。

    RMI 协议:采用 JDK 标准的 RMI 协议(基于 TCP 协议)、堵塞式短连接、JDK 标准序列化方式、同步通讯。

    适用于消费者和提供者个数差不多的,可传文件。测试发现偶尔会连接失败,需要重建 Stub。

    Hessian 协议:采用 http 通讯,采用 Servlet 暴露服务,多连接短连接的同步传输方式,采用hession 的二进制序列化,适合提供者比消费者多。

    Dubbo入门详细教程

    Dubbo快速入门,Java分布式框架必会的dubbo教程

    关于Dubbo面试题

    【面试题1】Dubbo支持的协议

    dubbo(默认):单一长连接和NIO异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者。传输协议 TCP,异步,Hessian 序列化;

    rmi:采用JDK标准的rmi协议实现,传输参数和返回参数对象需要实现Serializable接口,使用java标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP。多个短连接,TCP 协议传输,同步传输,适用常规的远程服务调用和 rmi 互操作。在依赖低版本的 Common-Collections包,java 序列化存在安全漏洞;

    webservice:基于 WebService 的远程调用协议,集成 CXF 实现,提供和原生 WebService 的互操作。多个短连接,基于 HTTP 传输,同步传输,适用系统集成和跨语言调用;

    http:基于 Http 表单提交的远程调用协议,使用Spring的HttpInvoke 实现。多个短连接,传输协议 HTTP,传入参数大小混合,提供者个数多于消费者,需要给应用程序和浏览器 JS 调用;

    hessian:集成Hessian 服务,基于HTTP通讯,采用Servlet暴露服务,Dubbo 内嵌 Jetty 作为服务器时默认实现,提供与Hession服务互操作。多个短连接,同步 HTTP 传输,Hessian 序列化,传入参数较大,提供者大于消费者,提供者压力较大,可传文件;

    memcache: 基于memcached实现的RPC协议

    传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。

    redis: 基于redis实现的RPC协议

    【面试题2】Dubbo推荐用什么协议?使用该协议有哪些优缺点?

    传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。

    【面试题3】Dubbo超时时间的设置

    通过timeout属性配置超时时间,服务的提供者和消费者都可以配置,尽量在服务提供者中配置,因为服务的提供者会对自己提供的服务情况更清楚超时时间不要设置太大(1~5S),会影响并发性能问题。

    【面试题4】Dubbo自动重试机

    Dubbo在调用服务不成功时,默认会重试2次。Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以 dubbo的重试机制也能一定程度的保证服务的质量

    【面试题5】Dubbo支持的注册中心

    Multicast 注册中心

    Multicast 注册中心不需要任何中心节点,只要广播地址,就能进行服务注册和发现。基于网络中组播传输实现

    Zookeeper 注册中心

    基于分布式协调系统 Zookeeper 实现,采用Zookeeper 的 watch 机制实现数据变更

    redis 注册中心

    基于redis实现,采用key/Map存储,住key存储服务名和类型,Map中key存储服务URL,value 服务过期时间。基于redis 的发布/订阅模式通知数据变更;

    【面试题6】Dubbo集群的负载均衡策略

    随机

    按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。(权重可以在dubbo管控台配置)

    轮循

    按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

    最少活跃调用数

    相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

    一致性Hash

    相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

    【面试题7】Dubbo支持哪些序列化方式?

    dubbo序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它

    hessian2序列化(默认推荐):hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是阿里修改过的hessian lite,它是dubbo RPC默认启用的序列化方式

    json序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库,但其实现都不是特别成熟,而且json这种文本序列化性能一般不如上面两种二进制序列化。

    java序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。

    【面试题8】注册中心宕机,服务间是否可以继续通信

    可以通信的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用;

    但前提是你没有增加新的服务,如果你要调用新的服务,则是不能办到的。

    另外如果服务的提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复;

    【面试题9】Dubbo与spring的关系

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

    【面试题10】Dubbo使用的是什么通信框架?

    NIO Netty框架

    【面试题11】Dubbo的集群容错方案

    Failover Cluster(默认):

    失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。

    Failfast Cluster

    快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

    Failsafe Cluster

    失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

    Failback Cluster

    失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

    Forking Cluster

    并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。

    Broadcast Cluster

    广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息。

    【面试题12】Dubbo 和 Spring Cloud 的关系?

    Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。而 Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托了 Spirng、Spirng Boot 的优势之上,两个框架在开始目标就不一致,Dubbo定位服务治理、Spirng Cloud 是一个生态。最大的区别:Dubbo 底层是使用 Netty 这样的 NIO 框架,是基于TCP 协议传输的,配合以 Hession 序列化完成 RPC 通信。而 SpringCloud 是基于 Http 协议+Rest 接口调用远程过程的通信,相对来说,Http 请求会有更大的报文,占的带宽也会更多。但是REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖。

    展开全文
  • dubbo入门详细教程

    万次阅读 2017-12-22 10:21:36
    dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.admin.root.password=root dubbo.admin.guest.password=guest 打开浏览器输入http://localhost:8088/dubbo-admin-2.5.8/ 输入账号root密码root 进入...

    !!!
    本菜鸟已转战简书,喜欢的小伙伴请访问https://www.jianshu.com/p/a929a719a097 (可免费下载资源!!!)
    !!!

    操作系统:win7

    本机配置:jdk,tomcat

    步骤

    1)下载 zookeeper注册中心
    http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.5.2-alpha/zookeeper-3.5.2-alpha.tar.gz

    我下载后解压到D盘根目录,位置随意
    打开解压后的文件根目录添加data,log文件夹

    进入conf文件夹
    复制zoo_sample.cfg后重命名为zoo.cfg

    打开zoo.cfg
    增加/修改以下信息
    dataDir=D:\zookeeper-3.5.2-alpha\data
    dataLogDir=D:\zookeeper-3.5.2-alpha\log

    进入bin文件夹执行zkServer.cmd

    遇到的错误:
    这里写图片描述

    这里之前我下载的版本是3.5.1,在网上找了很多解决方案,考虑可能存在与jdk版本不兼容,卸载重下,选择最新版3.5.2,执行。

    okay success
    2)打包发布dubbo-admin
    下载dubbo源代码
    https://codeload.github.com/alibaba/dubbo/legacy.zip/master
    下载后解压

    如图这里写图片描述

    打开cmd 进入解压后的此目录
    输入 mvn package -Dmaven.skip.test=true

    压缩后会在dubbo-admin/target 下生成war包

    如图这里写图片描述

    将此war放入本地tomcat>webapps目录下,启动tomcat(/bin/startup.bat)
    为了防止端口占用,可以再/conf/server.xml 修改tomcat端口,我的是8088
    tomcat自解压

    如图这里写图片描述

    打开dubbo.properties查看/修改 用户名或密码
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.admin.root.password=root
    dubbo.admin.guest.password=guest

    打开浏览器输入http://localhost:8088/dubbo-admin-2.5.8/
    输入账号root密码root
    进入
    这里写图片描述

    3)myEclipse利用maven构建服务提供者和消费者
    创建提供者dubboProviders
    这里写图片描述
    这里写图片描述
    这里写图片描述

    定义接口和实现类做测试用

    spring配置文件内部
    这里写图片描述

    TestMain文件内部
    这里写图片描述

    执行F11(需保证tomcat和zookeeper正在运行)
    这里写图片描述

    打开浏览器
    这里写图片描述

    提供者 end

    创建服务消费者dubboConsumers
    目录
    这里写图片描述

    Spring配置文件内部
    这里写图片描述

    TestMain文件内部
    这里写图片描述

    console打印
    这里写图片描述

    浏览器
    这里写图片描述

    消费者 end
    我的第一个dubbo项目完成

    小结:java测试时要保证tomcat和zookeeper常开,如果担心打开后自动关闭,可以用cmd命令打开

    资源路径:http://download.csdn.net/download/sysmwx/10169205

    展开全文
  • dubbo入门级别教程,dubbo+zookeeper环境搭建+内附实例代码,简单易用,可快速上手
  • Dubbo入门教程

    2018-06-06 10:35:08
    Dubbo入门---搭建一个最简单的Demo框架Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。 1. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和...
  • 从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用
  • 主要介绍了dubbo整合springboot新手入门详解,当一台计算机的程序需要调用另一台计算机代码的时候,就涉及远程调用。此时dubbo就粉末登场了,需要的朋友可以参考下
  • 本文是学习了dubbo之后自己手动写的,比较通俗,很多都是自己学习之后的理解,写的过程中没有参考任何文章。 另外dubbo也有官方文档,但是比较官方,也可以多看看dubbo的官方中文文档。 代码示例连接:demoTest ...

    本文是学习了dubbo之后自己手动写的,比较通俗,很多都是自己学习之后的理解,写的过程中没有参考任何文章。

    另外dubbo也有官方文档,但是比较官方,也可以多看看dubbo的官方中文文档。

    代码示例连接:demoTest


    dubbo是阿里的一个分布式服务开源框架,它的设计理念就是把一个大而全的项目模块化,每个模块都是一个独立的项目。

    为什么要把大项目拆分成多个小项目呢?

    因为随着项目越做越大,代码、功能越来越多,导致代码的复用性就会降低,项目变得庞大臃肿,维护起来比较麻烦,改一个功能所有的代码都需要重新打包发布,还可能会影响其他模块;对于开发者来说所有的开发者都在同一个项目里开发代码,虽然有版本管理软件(SVN,Git等),但即使这样也会使开发者开发时遇到许多问题。

    所以就诞生了分布式,分布式的原则就是将项目拆分若干个小项目,实现模块化,每个项目只关注自己的功能(假如按功能划分模块),需要其他模块的数据时就去调用它,分工更加明确。dubbo就是一个基于spring的分布式框架,可以和spring无缝整合。

    那么模块之间该如何调用呢?

    我们称服务提供者为服务生产者,服务调用者为服务消费者,他们两个是如何通信呢?消费者如何找到生产者呢?显然是通过网络,通过网络就必须要遵循一定的协议,约定,也就时需要有一个第三者或叫中间人、中介,称为注册中心,他来定义通讯的协议、规则。服务生产者服务消费者二者必须都来遵循这个规则。

    服务生产者在启动程序时把服务发布到注册中心,告诉注册中心他叫啥,他提供的服务的类型,他的IP和端口就行了,而服务消费者在启动程序时也去连接注册中心,告诉注册中心他叫啥,告诉注册中心他想要什么类型的服务。对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。

    具体怎么实现调用呢?在项目里的表现如何?

    模块之间要想调用,提供服务方需要创建服务接口,打成jar包,发布这个jar包,服务提供者面向接口编程,服务消费者调用服务时也用这个服务接口的jar包,创建服务接口的实例。

    为什么要创建服务接口并发布成jar包?因为服务的提供方和服务的调用方都要用到这个接口。服务消费者要使用这个服务,需要获得服务的实例(只关心服务的类型)来调用服务提供的方法,而服务的提供者也只需要实现接口就可以了。

    有了协议为什么还用dubbo?

    那我们直接遵循协议,去和注册中心打交道不就行了吗,为什么还产生了dubbo呢?

    毕竟有需求就有市场,归根结底还是因为我们懒。因为所有的人都要遵循这个协议,怎么连接网络,怎么传参数,格式如何等这些工作都是重复性的,是所有项目共性的,每次都写不就很麻烦吗,所以dubbo来帮你实现,来帮你完成这些共性的繁琐的工作,你只需要关注业务本身就行了,那些麻烦的协议dubbo来帮你遵循,所以就产生了dubbo,并且可能他做的这些工作比你自己写起来更高效比你写的代码好。

    服务的管理

    当项目越来越大,模块、服务越来越多,一个项目可能会调用很多服务,或者服务之间相互调用,这个时候你可能就不知道你这个服务调用了哪些服务或都被谁调用了,性能如何等,并且管理起来比较麻烦,别担心,有服务治理中心可以帮你解决这些问题。它是dubbo的一个后台监控系统,叫dubbo-admin,可以下载他的war包运行在web容器里就可以用了。

    使用dubbo框架来完成一个小demo

    我们用idea+spring+maven+zookeeper,来搭建dubbo项目

    前提是你安装好maven和zookeeper,这里不再讲述。

    1、首先创建一个project,在pom.xml引入dubbo和zkClient的依赖,因为3和4都需要这个依赖,所以写在父项目里。

            <!--引入dubbo-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.5.9</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--引入zookeeper-->
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>

    2、在这个project里创建一个model,命名为service,创建一个接口:

    @Service
    public interface MyService{
        <!--这个方法没有任何意义只是为了演示-->
        String getData(String name);
    
    }

    将这个父project右键选择Run maven的install,右键,如图:

    把项目打成jar包并安装到maven本地仓库,成功后会在本地仓库里看到

    3、再创建一个model,命名为webTest,服务消费者,添加spring-webmvc的依赖,以及刚才打的服务接口的依赖

            <dependency>
                <groupId>com.yya</groupId>
                <artifactId>service</artifactId>
                <version>1.0</version>
            </dependency>

    创建controller,引入服务接口实例,创建一个controller方法

    @Resource
    
    private MyService myService;//注入服务接口的实例
    
    @ResponseBody
    
    @ResultMapping("/getData")
    
    public String getData(String name){
    
         String data = myService.getData(name);
    
         return data;
    
    }

    4、再创建一个model,命名为serviceImpl,服务的提供者,添加spring-webmvc的依赖,以及刚才打的服务接口的依赖(和3一样),创建MyService的实现类

    @Service
    public class MyServiceImpl implements MyService{
        //实现接口
        public String getData(String name){
    
              return "good morning,"+name;
    
         }
    
    }

    创建完成后的结构是这样的

    5、webTest和serviceImpl都是web项目,需要配置web.xml和spring配置文件,首先配置serviceImpl这个项目,

    在resources目录下创建ApplicationContext.xml文件,配置如下:

    <!--扫描注解-->
    <context:component-scan base-package="com.yya.service"/>
    
    <!--dubbo可以和spring无缝整合,因为他本身就是用的spring-->
    <!--目的:找到注册中心,告诉他我是谁,端口是多少-->
    
    <!--1、配置别名,目的是在后台好区分到底是谁,name可以随便写,最好语义化-->
    <dubbo:application name="test1"/>
    
    <!--2、zookeeper注册中心;address注册中心的地址IP+端口;protocol注册中心的协议-->
    <dubbo:registry address="localhost:2181" protocol="zookeeper"/>
    
    <!--3、告诉注册中心我是谁即暴露服务 interface代表发布的服务类型 ref代表要发布哪个具体服务 timeout超时时间-->
    <dubbo:service interface="com.yya.service.TestService" ref="testServiceImpl" timeout="5000"/>
    <!-- 和本地bean一样实现服务 -->
    <bean id="testServiceImpl" class="com.yya.TestServiceImpl" />
    <!--4、配置服务的端口,因为消费者必须通过IP端口才能访问我发布的服务,我们在注册中心注册时注册中心就已经知道我们的IP了,所以现在只需要告诉他端口
    注册中心消费者可通过哪个端口找到我。端口可以随便写,但不可以被占用。一个dubbo被发布时必须独占一个端口-->
    <dubbo:protocol name="dubbo" port="12334"/>


    web.xml配置:读取spring配置文件,加载spring  

    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:ApplicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

    6、webTest和serviceImpl都是web项目,需要配置web.xml和spring配置文件,配置webTest这个项目,

    在resources目录下创建spring-MVC.xml文件,配置如下:

    <!--扫描注解-->
    <context:component-scan base-package="com.yya.controller"/>
    <!--找到注册中心,告诉他你想要什么服务-->
    <!--我是谁-->
    <dubbo:application name="diaoyongzhe"/>
    <!--找到注册中心-->
    <dubbo:registry address="localhost:2181" protocol="zookeeper" />
    <!--3告诉他你要什么-->
    <dubbo:reference interface="com.yya.service.TestService" id="testServiceImpl"/>

    web.xml配置: 

         <!-- springmvc 核心,请求分发器 -->
         <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring-mvc.xml</param-value>
            </init-param>
            <!--启动项目时就创建这个servlet对象,这个参数必须在init-param之后出现-->
            <load-on-startup>2</load-on-startup>
        </servlet>
        <!--配置拦截路径-->
        <servlet-mapping>
            <servlet-name>springMVC</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    启动zookeeper,zookeeper需要先安装好(如何安装zookeeper),启动成功后,先启动serviceImpl项目,再启动webTest项目。启动之前在二者的pom文件里加Tomcat的插件,用插件的方式启动,把端口改成不一样的。

    <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <port>9000</port>
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    启动完成后,访问localhost:8080/getData?name=tom

    返回good morning,tom代表调用成功。后来又改了,改成返回对象的了。可以参考这个demo,我已经上传到GitHub上了,点击下载:demoTest,使用的是jdk8

    题外话:为什么两个web项目的web.xml配置不一样?

    webTest里的controller是交给SpringMVC来处理,并不是spring容器。若交给spring容器来处理,代表项目一启动就要创建出来controller,这个时候可能还没有链接网络(没连zookeeper)可能还拿不到远程对象,就会注入失败,所以不能交给spring容器来处理。

    展开全文
  • dubbo 入门教程 基于zookeeper

    千次阅读 2016-07-25 14:36:11
    第一步 在spring官网...第三步 在dubbo.io官网的版本库下载dubbo的jar包。 第四步 在Apache的官网下载zookeeper的项目。 zookeeper的安装方法在上篇文章讲过了。拿出zookeeper根目录下面的zookeeper.jar就可以。 附

    第一步 在spring官网下载一个spring比较全的包。 我用的还是以前的3.2

    第二步 新建一个web项目。将spring的包放在lib下面。

    第三步 在dubbo.io官网的版本库下载dubbo的jar包。

    第四步 在Apache的官网下载zookeeper的项目。 zookeeper的安装方法在上篇文章讲过了。拿出zookeeper根目录下面的zookeeper.jar就可以。

    附加一些jar 工程下面有的 可以无视。slf4j-api-1.7.5.jar,slf4j-log4j12-1.7.5.jar,netty-3.7.0.Final.jar,jetty-util-6.1.26.jar,jetty-6.1.26.jar,commons-cli-1.2.jar 这些jar在zookeeper3.5的lib下面都有。直接拷贝就可以。

    还有一个就是zkclient-0.1.0.jar 一定要下载I0Itec的,这个应该不是zk开发的。这个我也忘记在哪里下载的了。不好意思。要是需要的可以在下面评论 留个邮箱什么的。

    下面新建一个接口:

    package com.unj.dubbotest.provider;
    public abstract interface DemoService {
     
     public abstract String build(String name) throws Exception;
     
    }

    新建一个实现类

    package com.unj.dubbotest.provider.impl;
    import com.unj.dubbotest.provider.DemoService;
    public class DemoServiceImpl implements DemoService {
     public String build(String name) throws Exception {
      System.out.println("name is === " + name);
      return "你好 名称是 ------------- >>>> " + name;
     }
    }

    在src下面新建一个applicationContext.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
            ">
     <!-- 具体的实现bean -->
     <bean id="demoService"
      class="com.unj.dubbotest.provider.impl.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>

    最后写一个启动服务的类 (用过cxf的都知道)

    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.out.println("新浪微博:疯狂的杨中仁.");
            
            System.in.read(); // 按任意键退出
        }
     
    }

    启动zookeeper。在执行启动服务的类 控制台打印了如下信息

    log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
    log4j:WARN Please initialize the log4j system properly.
    SLF4J: This version of SLF4J requires log4j version 1.2.12 or later. See also http://www.slf4j.org/codes.html#log4j_version
    新浪微博:疯狂的杨中仁.

    说明启动成功了。

    下面在做客户端。同意 新建一个web项目 把服务端的jar全部拷贝到lib下面去。

    新建一个接口 包名和服务端一样 这边接口 其实要在服务器那边拿过来的。

    package com.unj.dubbotest.provider;
    public abstract interface DemoService {
     
     public abstract String build(String name) throws Exception;
     
    }

    在src下面新建一个 applicationConsumer.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  
            ">
     <!-- consumer application name -->
     <dubbo:application name="consumer-of-helloworld-app" />
     <!-- registry address, used for consumer to discover services -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181" />
     <dubbo:consumer timeout="5000" />
     <!-- which service to consume? -->
     <dubbo:reference id="demoService"
      interface="com.unj.dubbotest.provider.DemoService" />
    </beans>

    新建一个main类来测试:

    package com;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.unj.dubbotest.provider.DemoService;
    public class Main {
     
     public static void main(String[] args) {
      
      
      ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
        new String[] { "applicationConsumer.xml" });
      context.start();
      DemoService demoService = (DemoService) context.getBean("demoService"); // get
      // service
      // invocation
      // proxy
      String hello = "";
      try {
       hello = demoService.build("新浪微博:疯狂的杨中仁");
      } catch (Exception e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } // do invoke!
      System.out.println(Thread.currentThread().getName() + " " + hello);
     }
     
    }

    打印信息如下:

     log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
    log4j:WARN Please initialize the log4j system properly.
    main 你好 名称是 ------------- >>>> 新浪微博:疯狂的杨中仁

    在看一下服务器端打印的信息

    展开全文
  • dubbo入门教程

    2019-02-23 15:30:27
    DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员...
  • dubbo 高级视频教程

    2018-03-27 17:28:29
    dubbo 高级视频教程 详细的实战教程讲解 微服务视频教程。附件是 txt 文件,内含网盘地址
  • 我感觉很不错的宝贝,现在和大家分享,希望能够帮到大家,如果你需要可以下载看看,很适合喜欢研究技术的人员
  • 迅雷播放器亲测,可以观看,不需要密码,部分可能需要密码; 08.第八阶段、Dubbo入门到精通架构高级课程 附带源代码,doc,pdf,安装包等等
  • dubbo入门

    2018-03-01 21:37:24
    https://github.com/caojx-git/learn/blob/master/notes/dubbo/dubbo%E5%85%A5%E9%97%A8.md
  • dubbo快速入门视频教程
  • 教程demo内容简介 主体框架:Springboot 2 + dubbo 2.6.2 api文档:swagger 2.9.2 orm:Mybatis,fastmybatis 参考文章 ​ dubbo : http://dubbo.apache.org/en-us/ ​ zookeeper: ...
  • 最简单的dubbo教程-快速入门

    万次阅读 多人点赞 2017-12-26 14:29:34
    所需环境zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册。 可参考:http://blog.csdn.net/jingyangv587/article/details/78901508 注意:启动后,请勿关闭!开始搭建1. ...
  • Dubbo 文章目录Dubbo一 基本介绍1.1 软件行业1.1.1 软件分类1.1.2 架构分类1.2 背景1.2.1 单一应用架构1.2.2 垂直应用架构1.2.3 分布式服务架构1.2.4 流动计算架构1.3 架构1.3.1 节点角色说明1.3.2 调用关系说明...
  • Dubbo入门到精通架构高级视频课程 更多精彩java高级解决方案,高级视频请到本人上传资料查找
  • Dubbo 快速入门教程

    2021-07-25 22:29:03
    Dubbo架构二、Dubbo快速入门1.创建两个maven工程,添加web2. 配置dubbodemo_provider3. 配置dubbodemo_consumer 一、Apache Dubbo概述 1. Dubbo简介 Apache Dubbo是一款高性能的Java RPC框架。 它是阿里巴巴公司...
  • dubbo入门搭建教程

    2020-05-18 21:40:22
    Dubbo的使用 背景  公共的逻辑业务提取出来形成服务,使得相同逻辑代码复用,各个层级之间最大限度的松耦合。 版本  2.5.10 安装过程 1、准备前提 (1)安装Zookeeper  建议参考 (2)安装Tomcat  建议参考 ...
  • Dubbo高可用 服务路由 服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者,Dubbo提供三种服务路由实现,分别为条件路由ConditionRouter、脚本路由...
  • SpringBoot-Dubbo入门教程

    2021-09-12 12:40:13
    SpringBoot框架和SSM框架Dubbo入门教程 介绍 http://dubbo.apache.org/zh/docs/v2.7/user/examples/ (官方文档) 当服务越来越多时,容量的评估,小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心基于访问...
  • 接下来我带大家从入门到实战,让你不管是实用还是面试中都迎刃而解 由于文章内容比较多,篇幅不允许,如有需要获取完整的资料文档的朋友可以点这里获取或者加QQ1404119194,备注csdn dubbo这个技术,可能都是...
  • 1.dubbo介绍 dubbo-user-book : http://dubbo.apache.org/books/dubbo-user-book duboo的服务注册中心有如下几种:1.1 Multicast 注册中心1.2 Redis 注册中心1.3 Simple 注册中心1.4 zookeeper 注册中心(常用,...
  • Dubbo 官方文档中文版本,整理页面,去除无效连接页面,添加页面跳转。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,530
精华内容 1,812
关键字:

dubbo入门详细教程