精华内容
下载资源
问答
  • dubbo教程pdf

    2017-12-10 11:53:41
    dubbo教程 dubbo教程 dubbo教程 dubbo教程 dubbo教程 dubbo教程
  • 尚硅谷的dubbo教程

    2018-09-02 12:55:21
    最新尚硅谷的dubbo教程,欢迎下载,免去分享的烦恼
  • dubbo教程demo代码

    2018-11-01 15:42:50
    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样...
  • 本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...
  • dubbo教程

    2021-02-07 10:14:00
    admin cd /Users/zhangxm/tools/dubbo-admin-develop 修改/Users/zhangxm/tools/dubbo-admin-develop/dubbo-admin-server工程下的application.properties # # Licensed to the Apache Software Foundation (ASF) ...

    Zookeeper注册中心

    zookeeper安装

    更改conf/zoo.cfg配置文件

    # The number of milliseconds of each tick
    tickTime=2000
    # The number of ticks that the initial 
    # synchronization phase can take
    initLimit=10
    # The number of ticks that can pass between 
    # sending a request and getting an acknowledgement
    syncLimit=5
    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    dataDir=../data/
    # the port at which the clients will connect
    clientPort=2181
    # the maximum number of client connections.
    # increase this if you need to handle more clients
    #maxClientCnxns=60
    #
    # Be sure to read the maintenance section of the 
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1
    
    ## Metrics Providers
    #
    # https://prometheus.io Metrics Exporter
    #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
    #metricsProvider.httpPort=7000
    #metricsProvider.exportJvmInfo=true
    
    admin.serverPort=8888//不改默认会占用8080端口

    zookeeper安装启动错误

    logs日志下
    错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain

    MacBookPro:zookeeper-server zhangxm$ pwd
    /Users/zhangxm/tools/apache-zookeeper-3.6.2/zookeeper-server
    
    mvn package -Dmaven.test.skip=true
    
    cd /Users/zhangxm/tools/apache-zookeeper-3.6.2/bin
    MacBookPro:bin zhangxm$ ./zkServer.sh start
    /usr/bin/java
    ZooKeeper JMX enabled by default
    Using config: /Users/zhangxm/tools/apache-zookeeper-3.6.2/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    MacBookPro:bin zhangxm$ ./zkServer.sh status
    /usr/bin/java
    ZooKeeper JMX enabled by default
    Using config: /Users/zhangxm/tools/apache-zookeeper-3.6.2/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: standalone
    MacBookPro:bin zhangxm$ lsof -i:2181
    COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
    java    96481 zhangxm   92u  IPv6 0xae579d67d9d36e51      0t0  TCP *:eforward (LISTEN)

    安装dubbo admin

    下载dubbo-admin
    cd /Users/zhangxm/tools/dubbo-admin-develop

    修改/Users/zhangxm/tools/dubbo-admin-develop/dubbo-admin-server工程下的application.properties

    #
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    #
    
    # centers in dubbo2.7
    admin.registry.address=zookeeper://127.0.0.1:2181
    admin.config-center=zookeeper://127.0.0.1:2181
    admin.metadata-report.address=zookeeper://127.0.0.1:2181
    
    #admin.registry.address=nacos://127.0.0.1:8848
    #admin.config-center=nacos://127.0.0.1:8848
    #admin.metadata-report.address=nacos://127.0.0.1:8848
    
    admin.root.user.name=root
    admin.root.user.password=root
    #group
    admin.registry.group=dubbo
    admin.config-center.group=dubbo
    admin.metadata-report.group=dubbo
    
    #session timeout, default is one hour
    admin.check.sessionTimeoutMilli=3600000
    
    #namespace used by nacos
    admin.registry.namespace=public
    admin.config-center.namespace=public
    admin.metadata-report.namespace=public
    
    admin.apollo.token=e16e5cd903fd0c97a116c873b448544b9d086de9
    admin.apollo.appId=test
    admin.apollo.env=dev
    admin.apollo.cluster=default
    admin.apollo.namespace=dubbo
    
    #compress
    server.compression.enabled=true
    server.compression.mime-types=text/css,text/javascript,application/javascript
    server.compression.min-response-size=10240
    1:Production Setup

    Clone source code on develop branch git clone https://github.com/apache/dubbo-admin.git

    2:Specify registry address in dubbo-admin-server/src/main/resources/application.properties
    3:Build

    mvn clean package -Dmaven.test.skip=true

    4:Start

    mvn --projects dubbo-admin-server spring-boot:run
    OR
    cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar

    5:Visit http://localhost:8080

    Default username and password is root

    展开全文
  • 尚硅谷最新Dubbo教程-百度网盘

    热门讨论 2018-08-28 14:51:02
    尚硅谷Dubbo教程2018年8月27日最新发布! 业界超火爆的分布式框架之一!
  • dubbo视频教程

    2017-12-25 16:28:28
    最全的阿里巴巴dubbo视频教程,框架源码可直接使用,包含基本教程
  • dubbo教程Dubbo的总体架构,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色
  • dubbo 教程 权威指南

    2018-08-22 14:41:06
    非扫描版(图片)的dubbo文档,很全,很详细,有需要的自行下载吧
  • 尚硅谷dubbo教程

    2018-08-31 14:02:33
    尚硅谷最新dubbo视频教程
  • 本篇文章主要介绍了Springboot整合Dubbo教程之项目创建和环境搭建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Dubbo教程

    2018-12-16 14:38:07
    教程pdf版本下载:https://download.csdn.net/download/zpcandzhj/10152769 本教程代码下载:...推荐 spring cloud 微服务教程: https://blog.csdn.net/hellozpc/article/details/...

    本教程pdf版本下载:https://download.csdn.net/download/zpcandzhj/10152769

    本教程代码下载:https://download.csdn.net/download/zpcandzhj/10799379

    推荐 spring cloud 微服务教程:

    https://blog.csdn.net/hellozpc/article/details/84144453

    https://blog.csdn.net/hellozpc/article/details/83692496

    如果此教程对您有帮助,就请有钱的捧个钱场,没钱的捧个人场(转载分享)哦~

    1. 教程大纲
    1、 了解什么是dubbo

    2、 我们使用dubbo能做什么

    3、 Dubbo快速入门案例

    4、 Dubbo监控、admin控制台

    参考资料:

    http://dubbo.io/

    https://www.gitbook.com/@dubbo

    Dubbo项目GitHub主页:

    https://github.com/alibaba/dubbo

    2. 什么是dubbo
    2.1. 简介
    DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

     

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。Dubbo框架使得使用者可以像调用本地方法一样调用远程方法,而这一切只需要简单的配置。Dubbo完全兼容Spring配置方式注入,也与Spring boot无缝整合。

     

    开发团队:

     

    2.2. RPC
     

    2.3. 官网
    http://dubbo.io/

     

    2.4. 版本说明
     

     

    2017年9月份,沉寂了5年之久的Dubbo重新得到维护!

    本教程基于2.5.7版本

    2.5. 下载
    Dubbo源码托管于github,并且将jar包发布到maven的中央仓库,所以可以从github和maven中央仓库来下载。

    2.5.1. 源码下载
    https://github.com/alibaba/dubbo

     

    2.5.2. 发布包下载
    http://repo1.maven.org/maven2/com/alibaba/dubbo/

     

    3. 通过Maven编译构建dubbo
    既然可以下载得到源码以及发布包,那么为什么要去构建dubbo呢?我们先来看下dubbo的主要模块:

     

    其中,核心框架、管理控制台、简易监控中心、简易注册中心是我们需要的模块。目前只有核心模块jar包可以下载到,其它的均无法直接下载,所以我们需要构建dubbo。

    3.1. 导入源码到IDEA
    从githhub上下载dubbo源码得到dubbo-master.zip:

    https://github.com/alibaba/dubbo

     

    解压压缩包:

     

    导入源码到IDEA:

     

    右侧Maven Projects有红色报错信息,报maven插件无法加载,这个不要紧,待会编译打包Reimport一下即可!

    如果POM文件有些划红线的地方也可不管,编译报错再详细分析。切勿编辑pom文件,可能造成一些换行等,编译pom文件会报无法解析(人品好的话编译不会报错,一次成功!)

    3.2. 通过源码构建dubbo
    在构建之前,各个源码包下面还没有target目录,构建成功之后,打好的jar包、war包会放到默认的输出目录下的target目录下。

     

    配置运行参数:

     

     

    点击运行按钮开始构建。

     

    第一次构建耗时比较长,要联网下载许多jar包(建议使用阿里云的maven仓库)

    maven_settings.xml中配置:

    <mirrors>
     
    <mirror>
     
    <id>nexus-aliyun</id>
     
    <mirrorOf>*</mirrorOf>
     
    <name>Nexus aliyun</name>
     
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
     
    </mirror>
     
    </mirrors>
    构建完成:

    [INFO] Reactor Summary:
     
    [INFO]
     
    [INFO] dubbo-parent ....................................... SUCCESS [  0.171 s]
     
    [INFO] Hessian Lite(Alibaba embed version) ................ SUCCESS [  6.314 s]
     
    [INFO] dubbo-common ....................................... SUCCESS [  6.943 s]
     
    [INFO] dubbo-container .................................... SUCCESS [  0.005 s]
     
    [INFO] dubbo-container-api ................................ SUCCESS [  1.129 s]
     
    [INFO] dubbo-container-spring ............................. SUCCESS [  1.416 s]
     
    [INFO] dubbo-container-jetty .............................. SUCCESS [  1.341 s]
     
    [INFO] dubbo-container-log4j .............................. SUCCESS [  1.343 s]
     
    [INFO] dubbo-container-logback ............................ SUCCESS [  1.416 s]
     
    [INFO] dubbo-remoting ..................................... SUCCESS [  0.004 s]
     
    [INFO] dubbo-remoting-api ................................. SUCCESS [  4.595 s]
     
    [INFO] dubbo-remoting-netty ............................... SUCCESS [  2.015 s]
     
    [INFO] dubbo-remoting-mina ................................ SUCCESS [  1.652 s]
     
    [INFO] dubbo-remoting-grizzly ............................. SUCCESS [  0.925 s]
     
    [INFO] dubbo-remoting-p2p ................................. SUCCESS [  1.690 s]
     
    [INFO] dubbo-remoting-http ................................ SUCCESS [  0.965 s]
     
    [INFO] dubbo-remoting-zookeeper ........................... SUCCESS [  1.657 s]
     
    [INFO] dubbo-remoting-netty4 .............................. SUCCESS [  2.108 s]
     
    [INFO] dubbo-rpc .......................................... SUCCESS [  0.004 s]
     
    [INFO] dubbo-rpc-api ...................................... SUCCESS [  2.920 s]
     
    [INFO] dubbo-rpc-default .................................. SUCCESS [  2.990 s]
     
    [INFO] dubbo-rpc-injvm .................................... SUCCESS [  1.493 s]
     
    [INFO] dubbo-rpc-rmi ...................................... SUCCESS [  1.602 s]
     
    [INFO] dubbo-rpc-hessian .................................. SUCCESS [  1.681 s]
     
    [INFO] dubbo-rpc-http ..................................... SUCCESS [  0.784 s]
     
    [INFO] dubbo-rpc-webservice ............................... SUCCESS [  1.870 s]
     
    [INFO] dubbo-cluster ...................................... SUCCESS [  3.492 s]
     
    [INFO] dubbo-registry ..................................... SUCCESS [  0.005 s]
     
    [INFO] dubbo-registry-api ................................. SUCCESS [  2.279 s]
     
    [INFO] dubbo-monitor ...................................... SUCCESS [  0.004 s]
     
    [INFO] dubbo-monitor-api .................................. SUCCESS [  1.530 s]
     
    [INFO] dubbo-filter ....................................... SUCCESS [  0.004 s]
     
    [INFO] dubbo-filter-validation ............................ SUCCESS [  0.899 s]
     
    [INFO] dubbo-filter-cache ................................. SUCCESS [  0.822 s]
     
    [INFO] dubbo-registry-default ............................. SUCCESS [  1.977 s]
     
    [INFO] dubbo-monitor-default .............................. SUCCESS [  1.567 s]
     
    [INFO] dubbo-registry-multicast ........................... SUCCESS [  1.674 s]
     
    [INFO] dubbo-config ....................................... SUCCESS [  0.004 s]
     
    [INFO] dubbo-config-api ................................... SUCCESS [  3.004 s]
     
    [INFO] dubbo-config-spring ................................ SUCCESS [  3.852 s]
     
    [INFO] dubbo-rpc-thrift ................................... SUCCESS [  3.846 s]
     
    [INFO] dubbo-rpc-memcached ................................ SUCCESS [  0.790 s]
     
    [INFO] dubbo-rpc-redis .................................... SUCCESS [  0.828 s]
     
    [INFO] dubbo-registry-zookeeper ........................... SUCCESS [  1.580 s]
     
    [INFO] dubbo-registry-redis ............................... SUCCESS [  1.641 s]
     
    [INFO] dubbo .............................................. SUCCESS [ 39.232 s]
     
    [INFO] dubbo-simple ....................................... SUCCESS [  0.005 s]
     
    [INFO] dubbo-registry-simple .............................. SUCCESS [  4.940 s]
     
    [INFO] dubbo-monitor-simple ............................... SUCCESS [  9.127 s]
     
    [INFO] dubbo-admin ........................................ SUCCESS [ 11.274 s]
     
    [INFO] dubbo-demo ......................................... SUCCESS [  0.004 s]
     
    [INFO] dubbo-demo-api ..................................... SUCCESS [  0.660 s]
     
    [INFO] dubbo-demo-provider ................................ SUCCESS [  3.590 s]
     
    [INFO] dubbo-demo-consumer ................................ SUCCESS [  3.541 s]
     
    [INFO] dubbo-test ......................................... SUCCESS [  0.004 s]
     
    [INFO] dubbo-test-benchmark ............................... SUCCESS [  4.688 s]
     
    [INFO] dubbo-test-compatibility ........................... SUCCESS [  0.041 s]
     
    [INFO] dubbo-test-integration ............................. SUCCESS [  0.044 s]
     
    [INFO] dubbo-test-examples ................................ SUCCESS [  3.082 s]
     
    [INFO] ------------------------------------------------------------------------
     
    [INFO] BUILD SUCCESS
     
    [INFO] ------------------------------------------------------------------------
     
    [INFO] Total time: 02:39 min
     
    [INFO] Finished at: 2017-11-19T14:33:11+08:00
     
    [INFO] Final Memory: 41M/163M
     
    [INFO] ------------------------------------------------------------------------
    3.3. 找到对应的模块包
    3.3.1. 核心框架
     

    3.3.2. 管理控制台
     

    3.3.3. 简易监控中心
     

    3.3.4. 简易注册中心


    4. Dubbo框架说明
    4.1. 背景


    4.2. 需求


    4.3. 架构
     

     

    调用关系:

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

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

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

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

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

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

    5. 快速入门案例
    5.1. 实现功能
    假设现在需要开发2个独立的业务系统,B系统和A系统。A系统调用B系统暴露的接口获取数据,比如查询用户列表。

     

    5.2. 安装zookeeper
    要运行dubbo,首先需要搭建一个注册中心,比如使用zk作为服务注册中心

    zk安装包解压如下:

     

    修改配置文件conf/zoo.cfg:设置data目录,该目录必须存在。

     

     

     双击zkServer启动zookeeper服务(cmd文件是windows脚本,sh文件是linux下的脚本):

     

    5.3. 搭建B系统(B模块)
    5.3.1. 创建工程
    新建一个maven项目

     

    新建模块

     

    上一步也可以不选骨架,这样生成的目录没有webapp目录,需要手动创建!并且手动改pom文件的packing类型为war

    <packaging>war</packaging>

     

    一路next,直到finish。

     

    5.3.2. 导入依赖
     

    编辑模块systemB的pom文件:

    Dubbo核心jar可以先install到本地maven仓库。其实如果联网,一旦保存pom文件,maven工具会自动远程仓库下载。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     
        <parent>
     
            <artifactId>dubbodemo</artifactId>
     
            <groupId>cn.com.zpc</groupId>
     
            <version>1.0-SNAPSHOT</version>
     
        </parent>
     
        <modelVersion>4.0.0</modelVersion>
     
        <artifactId>systemB</artifactId>
     
        <packaging>war</packaging>
     
        <name>systemB Maven Webapp</name>
     
        <url>http://maven.apache.org</url>
     
        <dependencies>
     
            <dependency>
     
                <groupId>junit</groupId>
     
                <artifactId>junit</artifactId>
     
                <version>3.8.1</version>
     
                <scope>test</scope>
     
            </dependency>
     
            <!-- 采用spring配置方式使用dubbo,所以需要导入spring容器依赖-->
     
            <dependency>
     
                <groupId>org.springframework</groupId>
     
                <artifactId>spring-webmvc</artifactId>
     
                <version>4.3.10.RELEASE</version>
     
            </dependency>
     
            <dependency>
     
                <groupId>org.slf4j</groupId>
     
                <artifactId>slf4j-log4j12</artifactId>
     
                <version>1.6.4</version>
     
            </dependency>
     
            <dependency>
     
                <groupId>com.alibaba</groupId>
     
                <artifactId>dubbo</artifactId>
     
                <version>2.5.7</version>
     
                <!-- 排除传递spring依赖-->
     
                <exclusions>
     
                    <exclusion>
     
                        <artifactId>spring</artifactId>
     
                        <groupId>org.springframework</groupId>
     
                    </exclusion>
     
                    <exclusion>
     
                        <artifactId>spring-web</artifactId>
     
                        <groupId>org.springframework</groupId>
     
                    </exclusion>
     
                    <exclusion>
     
                        <artifactId>spring-beans</artifactId>
     
                        <groupId>org.springframework</groupId>
     
                    </exclusion>
     
                    <exclusion>
     
                        <artifactId>spring-context</artifactId>
     
                        <groupId>org.springframework</groupId>
     
                    </exclusion>
     
                </exclusions>
     
            </dependency>
     
        </dependencies>
     
        <build>
     
            <finalName>systemB</finalName>
     
            <plugins>
     
                <plugin>
     
                    <groupId>org.apache.tomcat.maven</groupId>
     
                    <artifactId>tomcat7-maven-plugin</artifactId>
     
                    <version>2.2</version>
     
                    <configuration>
     
                        <port>8081</port>
     
                        <path>/</path>
     
                    </configuration>
     
                </plugin>
     
            </plugins>
     
        </build>
     
    </project>
    5.3.3. 配置log4j文件
    在resources下新建log4j.properties:

    log4j.rootLogger=DEBUG,A1
     
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
     
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
     
    log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
    5.3.4. 创建User对象
    package com.zpc.dubbo.systemb.pojo;
    public class Userimplements java.io.Serializable{
        private static final longserialVersionUID = -2668999087589887337L;
        privateLong id;
        privateString username;
        privateString password;
        privateInteger age;
        publicLong getId() {
            returnid;
        }
        public voidsetId(Longid) {
            this.id= id;
        }
        publicString getUsername() {
            returnusername;
        }
        public voidsetUsername(Stringusername) {
            this.username= username;
        }
        publicString getPassword() {
            returnpassword;
        }
        public voidsetPassword(Stringpassword) {
            this.password= password;
        }
        publicInteger getAge() {
            returnage;
        }
        public voidsetAge(Integerage) {
            this.age= age;
        }
    }
    5.3.5. 创建UserService(接口)并提供查询服务
    package com.zpc.dubbo.systemb.service;
    import com.zpc.dubbo.systemb.pojo.User;
    import java.util.List;
    public interface UserService{
        /**
         * 查询所有的用户数据
         */
        publicList<User>queryAll();
    }
    5.3.6. 创建UserServiceImpl实现类
    package com.zpc.dubbo.systemb.service.impl;
    import com.zpc.dubbo.systemb.pojo.User;
    import com.zpc.dubbo.systemb.service.UserService;
    import java.util.ArrayList;
    import java.util.List;
    public class UserServiceImplimplements UserService{
        /**
         * 实现查询,这里做模拟实现,不做具体的数据库查询
         */
        @Override
        publicList<User>queryAll() {
            List<User>list =new ArrayList<User>();
            for(inti =0;i <10;i++) {
                Useruser =new User();
                user.setAge(20+ i);
                user.setId(Long.valueOf(i+ 1));
                user.setPassword("123456");
                user.setUsername("username_"+ i);
                list.add(user);
            }
            returnlist;
        }
    }
    5.3.7. 编写dubbo配置文件
    dubbo-provider.xml

     

    具体配置:

    <beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:applicationname="dubbo-b-provider"/>
        <!-- 这里使用的注册中心是zookeeper -->
        <dubbo:registryaddress="zookeeper://127.0.0.1:2181"client="zkclient"/>
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocolname="dubbo"port="20880"/>
        <!-- 将该接口暴露到dubbo中 -->
        <dubbo:serviceinterface="com.zpc.dubbo.systemb.service.UserService"ref="userServiceImpl"/>
        <!-- 将具体的实现类加入到Spring容器中 -->
        <beanid="userServiceImpl"class="com.zpc.dubbo.systemb.service.impl.UserServiceImpl"/>
    </beans>
    5.3.8. 导入zookeeper依赖
    <dependency>
     
    <groupId>org.apache.zookeeper</groupId>
     
    <artifactId>zookeeper</artifactId>
     
    <version>3.4.8</version>
     
    </dependency>
     
    <dependency>
     
    <groupId>com.github.sgroschupf</groupId>
     
    <artifactId>zkclient</artifactId>
     
    <version>0.1</version>
     
    </dependency>
    5.3.9. 编写Web.xml
    <?xml version="1.0" encoding="UTF-8"?>
     
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
     
    <display-name>dubbo-b</display-name>
     
    <context-param>
     
    <param-name>contextConfigLocation</param-name>
     
    <param-value>classpath:dubbo/dubbo-*.xml</param-value>
     
    </context-param>
     
    <!--Spring的ApplicationContext载入 -->
     
    <listener>
     
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     
    </listener>
     
        <welcome-file-list>
     
         <welcome-file>index.jsp</welcome-file>
     
        </welcome-file-list>
     
    </web-app>
    5.3.10. 启动tomcat
    使用maven插件启动服务器:

     

    查看tomcat启动日志:

    2017-11-19 16:49:45,033 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO]Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
    2017-11-19 16:49:45,034 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO]Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session
    2017-11-19 16:49:45,035 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[DEBUG] Session establishment request sent on 127.0.0.1/127.0.0.1:2181
    2017-11-19 16:49:45,190 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO] Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x15fd342ea0c0000, negotiated timeout = 30000
     
    2017-11-19 16:49:45,191 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[DEBUG] Received event: WatchedEvent state:SyncConnected type:None path:null
     
    2017-11-19 16:49:45,192 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[INFO] zookeeper state changed (SyncConnected)
    2017-11-19 16:49:45,192 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[DEBUG] Leaving process event
    2017-11-19 16:49:45,192 [DubboZkclientConnector] [org.I0Itec.zkclient.ZkClient]-[DEBUG] State is SyncConnected
    2017-11-19 16:49:45,194 [localhost-startStop-1] [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry]-[INFO]  [DUBBO]Register: dubbo://192.168.181.1:20880/com.zpc.dubbo.systemb.service.UserService?anyhost=true&application=dubbo-b-provider&dubbo=2.5.7&generic=false&interface=com.zpc.dubbo.systemb.service.UserService&methods=queryAll&pid=5564&side=provider×tamp=1511081384696, dubbo version: 2.5.7, current host: 127.0.0.1
    2017-11-19 16:49:45,209 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[DEBUG] Reading reply sessionid:0x15fd342ea0c0000, packet:: clientPath:null serverPath:null finished:false header:: 1,3  replyHeader:: 1,569,-101  request:: '/dubbo/com.zpc.dubbo.systemb.service.UserService/providers,F  response::  
    可以看到,已经将UserService服务注册到zookeeper注册中心,协议采用的是dubbo。

    Zookeeper控制台显示收到连接:

     

    5.4. 搭建A系统(A模块)
    5.4.1. 创建工程
    步骤可以参照搭建B系统!A系统创建完成:

     

    5.4.2. 导入依赖
    A系统的pom文件:参考B系统,一模一样!

    5.4.3. 配置log4j文件
    log4j.properties(和B系统一样配置即可):
     
    log4j.rootLogger=DEBUG,A1
     
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
     
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
     
    log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
    5.4.4. 从B系统中拷贝User对象、UserService接口到A系统
    注意是从B系统完全拷贝到A系统,包名不能改动!

     

    5.4.5. 编写A系统的dubbo配置文件
    dubbo-consumer.xml:

    <beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:applicationname="dubbo-a-consumer"/>
        <!-- 这里使用的注册中心是zookeeper -->
        <dubbo:registryaddress="zookeeper://127.0.0.1:2181"client="zkclient"/>
        <!-- 从注册中心中查找服务 -->
        <dubbo:referenceid="userService"interface="com.zpc.dubbo.systemb.service.UserService"/>
    </beans>
    5.4.6. 编写UserService测试用例


    package com.zpc.dubbotest;
    import com.zpc.dubbo.systemb.pojo.User;
    import com.zpc.dubbo.systemb.service.UserService;
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import java.util.List;
    public class TestUserService{
        privateUserService userService;
        @Before
        public voidsetUp()throws Exception{
            ApplicationContextapplicationContext =new ClassPathXmlApplicationContext(
                    "classpath:dubbo/*.xml");
            this.userService= applicationContext.getBean(UserService.class);
        }
        @Test
        public voidtestQueryAll() {
            List<User>users =this.userService.queryAll();
            for(Useruser :users) {
                System.out.println(user);
            }
        }
    }
    5.4.7. 查看效果
    (重写了User的toString方法!)

    把zookeeper、B系统运行起来,再运行A系统的测试用例:

     

    可以看到,已经查询到10条数据,那么,也就是说A系统通过B系统提供的服务获取到了数据。

    5.5. 解决代码重复问题
    通过刚刚的示例我们可以发现,其中User对象和UserService在A系统和B系统中都使用,那么,我们是否应该将该代码复用,而不用硬拷贝?

    答案是肯定的。

    在使用dubbo时,provider需要将提供服务所需要的java代码(bean、interface等)单独打包成jar提供给consumer使用。

    5.5.1. 创建dubbo_systemB_api模块


    5.5.2. 将systemB中的pojo和service接口剪切到dubbo-systemB-api中
    注意:B系统和A系统的pojo与service接口全部删除,全部直接依赖dubbo-systemB-api!

    5.5.3. 在systemB的pom.xml文件中添加dubbo-systemB-api的依赖,并且将pojo与service接口删除
    <

    dependency>
        <groupId>cn.com.zpc</groupId>
        <artifactId>dubbo_systemB_api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    修改dubbo-provider.xml

    <

    !-- 将该接口暴露到dubbo中 -->
    <dubbo:serviceinterface="com.zpc.systemb.api.service.UserService"ref="userServiceImpl"/>
    5.5.4. 在systemA的pom.xml文件中添加dubbo-systemB-api的依赖,并且将pojo与service接口删除
    <

    dependency>
        <groupId>cn.com.zpc</groupId>
        <artifactId>dubbo_systemB_api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    修改dubbo-consumer.xml

    <!-- 从注册中心中查找服务 -->
    <dubbo:referenceid="userService"interface="com.zpc.systemb.api.service.UserService"/>
     

    此时目录结构如下(只有api包中保留接口和pojo类定义):

     

    5.5.5. 测试
    测试之前先rebuild项目!

     

    依次启动zookeeper和系统B,再运行系统A中的测试用例!

     

    测试,发现,和之前实现一样。

     

    其实也可以把接口保留B系统中(毕竟B系统提供的服务嘛)。然后在A系统中直接依赖B系统的jar包即可。

    6. 管理界面
    dubbo提供了一套在线管理整个服务的功能,管理控制台为阿里内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。

    6.1. 安装
    将dubbo-admin-2.5.7.war部署到tomcat的webapps目录下的ROOT目录里:

     

    6.2. 修改配置文件
     

    6.3. 启动tomcat
     

     

     

    6.4. 查看管理界面
    使用如下用户登录(密码和用户名一致,如root/root):

     

    登录http://127.0.0.1:8080/

    Tomcat端口未必是8080,看自己怎么配的。

    效果:

     

     

    功能:

     

     

    提供者:

    消费者:

     

    应用:

     

     

    7. dubbo的配置详解
    7.1. <dubbo:protocol/>
    服务提供者协议配置:
    配置类:com.alibaba.dubbo.config.ProtocolConfig
    说明:如果需要支持多协议,可以声明多个<dubbo:protocol>标签,并在<dubbo:service>中通过protocol属性指定使用的协议。

    标签

    属性

    对应URL参数

    类型

    是否必填

    缺省值

    作用

    描述

    兼容性

    <dubbo:protocol>

    id

     

    string

    可选

    dubbo

    配置关联

    协议BeanId,可以在<dubbo:service protocol="">中引用此ID,如果ID不填,缺省和name属性值一样,重复则在name后加序号。

    2.0.5以上版本

    <dubbo:protocol>

    name

    <protocol>

    string

    必填

    dubbo

    性能调优

    协议名称

    2.0.5以上版本

    <dubbo:protocol>

    port

    <port>

    int

    可选

    dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80 
    如果配置为-1 或者 没有配置port,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控。

    服务发现

    服务端口

    2.0.5以上版本

    <dubbo:protocol>

    host

    <host>

    string

    可选

    自动查找本机IP

    服务发现

    -服务主机名,多网卡选择或指定VIP及域名时使用,为空则自动查找本机IP,-建议不要配置,让Dubbo自动获取本机IP

    2.0.5以上版本

    <dubbo:protocol>

    threadpool

    threadpool

    string

    可选

    fixed

    性能调优

    线程池类型,可选:fixed/cached

    2.0.5以上版本

    <dubbo:protocol>

    threads

    threads

    int

    可选

    100

    性能调优

    服务线程池大小(固定大小)

    2.0.5以上版本

    <dubbo:protocol>

    iothreads

    threads

    int

    可选

    cpu个数+1

    性能调优

    io线程池大小(固定大小)

    2.0.5以上版本

    <dubbo:protocol>

    accepts

    accepts

    int

    可选

    0

    性能调优

    服务提供方最大可接受连接数

    2.0.5以上版本

    <dubbo:protocol>

    payload

    payload

    int

    可选

    88388608(=8M)

    性能调优

    请求及响应数据包大小限制,单位:字节

    2.0.5以上版本

    <dubbo:protocol>

    codec

    codec

    string

    可选

    dubbo

    性能调优

    协议编码方式

    2.0.5以上版本

    <dubbo:protocol>

    serialization

    serialization

    string

    可选

    dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json

    性能调优

    协议序列化方式,当协议支持多种序列化方式时使用,比如:dubbo协议的dubbo,hessian2,java,compactedjava,以及http协议的json等

    2.0.5以上版本

    <dubbo:protocol>

    accesslog

    accesslog

    string/boolean

    可选

     

    服务治理

    设为true,将向logger中输出访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件

    2.0.5以上版本

    <dubbo:protocol>

    path

    <path>

    string

    可选

     

    服务发现

    提供者上下文路径,为服务path的前缀

    2.0.5以上版本

    <dubbo:protocol>

    transporter

    transporter

    string

    可选

    dubbo协议缺省为netty

    性能调优

    协议的服务端和客户端实现类型,比如:dubbo协议的mina,netty等,可以分拆为server和client配置

    2.0.5以上版本

    <dubbo:protocol>

    server

    server

    string

    可选

    dubbo协议缺省为netty,http协议缺省为servlet

    性能调优

    协议的服务器端实现类型,比如:dubbo协议的mina,netty等,http协议的jetty,servlet等

    2.0.5以上版本

    <dubbo:protocol>

    client

    client

    string

    可选

    dubbo协议缺省为netty

    性能调优

    协议的客户端实现类型,比如:dubbo协议的mina,netty等

    2.0.5以上版本

    <dubbo:protocol>

    dispatcher

    dispatcher

    string

    可选

    dubbo协议缺省为all

    性能调优

    协议的消息派发方式,用于指定线程模型,比如:dubbo协议的all, direct, message, execution, connection等

    2.1.0以上版本

    <dubbo:protocol>

    queues

    queues

    int

    可选

    0

    性能调优

    线程池队列大小,当线程池满时,排队等待执行的队列大小,建议不要设置,当线程程池时应立即失败,重试其它服务提供机器,而不是排队,除非有特殊需求。

    2.0.5以上版本

    <dubbo:protocol>

    charset

    charset

    string

    可选

    UTF-8

    性能调优

    序列化编码

    2.0.5以上版本

    <dubbo:protocol>

    buffer

    buffer

    int

    可选

    8192

    性能调优

    网络读写缓冲区大小

    2.0.5以上版本

    <dubbo:protocol>

    heartbeat

    heartbeat

    int

    可选

    0

    性能调优

    心跳间隔,对于长连接,当物理层断开时,比如拔网线,TCP的FIN消息来不及发送,对方收不到断开事件,此时需要心跳来帮助检查连接是否已断开

    2.0.10以上版本

    <dubbo:protocol>

    telnet

    telnet

    string

    可选

     

    服务治理

    所支持的telnet命令,多个命令用逗号分隔

    2.0.5以上版本

    <dubbo:protocol>

    register

    register

    boolean

    可选

    true

    服务治理

    该协议的服务是否注册到注册中心

    2.0.8以上版本

    <dubbo:protocol>

    contextpath

    contextpath

    String

    可选

    缺省为空串

    服务治理

     

    2.0.6以上版本

     

    7.2. 协议
    dubbo提供的协议有:

     

    7.2.1. dubbo://
    Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

    Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。

    配置:

     

    执行过程:

     

    默认连接:

    限制最大连接:

     

    7.3. <dubbo:registry/>
    注册中心配置:

    配置类:com.alibaba.dubbo.config.RegistryConfig

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

     

    标签

    属性

    对应URL参数

    类型

    是否必填

    缺省值

    作用

    描述

    兼容性

    <dubbo:registry>

    id

     

    string

    可选

     

    配置关联

    注册中心引用BeanId,可以在<dubbo:service registry="">或<dubbo:reference registry="">中引用此ID

    1.0.16以上版本

    <dubbo:registry>

    address

    <host:port>

    string

    必填

     

    服务发现

    注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册中心,请配置多个<dubbo:registry>标签

    1.0.16以上版本

    <dubbo:registry>

    protocol

    <protocol>

    string

    可选

    dubbo

    服务发现

    注同中心地址协议,支持dubbo, http, local三种协议,分别表示,dubbo地址,http地址,本地注册中心

    2.0.0以上版本

    <dubbo:registry>

    port

    <port>

    int

    可选

    9090

    服务发现

    注册中心缺省端口,当address没有带端口时使用此端口做为缺省值

    2.0.0以上版本

    <dubbo:registry>

    username

    <username>

    string

    可选

     

    服务治理

    登录注册中心用户名,如果注册中心不需要验证可不填

    2.0.0以上版本

    <dubbo:registry>

    password

    <password>

    string

    可选

     

    服务治理

    登录注册中心密码,如果注册中心不需要验证可不填

    2.0.0以上版本

    <dubbo:registry>

    transport

    registry.transporter

    string

    可选

    netty

    性能调优

    网络传输方式,可选mina,netty

    2.0.0以上版本

    <dubbo:registry>

    timeout

    registry.timeout

    int

    可选

    5000

    性能调优

    注册中心请求超时时间(毫秒)

    2.0.0以上版本

    <dubbo:registry>

    session

    registry.session

    int

    可选

    60000

    性能调优

    注册中心会话超时时间(毫秒),用于检测提供者非正常断线后的脏数据,比如用心跳检测的实现,此时间就是心跳间隔,不同注册中心实现不一样。

    2.1.0以上版本

    <dubbo:registry>

    file

    registry.file

    string

    可选

     

    服务治理

    使用文件缓存注册中心地址列表及服务提供者列表,应用重启时将基于此文件恢复,注意:两个注册中心不能使用同一文件存储

    2.0.0以上版本

    <dubbo:registry>

    wait

    registry.wait

    int

    可选

    0

    性能调优

    停止时等待通知完成时间(毫秒)

    2.0.0以上版本

    <dubbo:registry>

    check

    check

    boolean

    可选

    true

    服务治理

    注册中心不存在时,是否报错

    2.0.0以上版本

    <dubbo:registry>

    register

    register

    boolean

    可选

    true

    服务治理

    是否向此注册中心注册服务,如果设为false,将只订阅,不注册

    2.0.5以上版本

    <dubbo:registry>

    subscribe

    subscribe

    boolean

    可选

    true

    服务治理

    是否向此注册中心订阅服务,如果设为false,将只注册,不订阅

    2.0.5以上版本

    <dubbo:registry>

    dynamic

    dynamic

    boolean

    可选

    true

    服务治理

    服务是否动态注册,如果设为false,注册后将显示后disable状态,需人工启用,并且服务提供者停止时,也不会自动取消册,需人工禁用。

    2.0.5以上版本

    7.4. 注册中心
    7.4.1. zookeeper注册中心
     

    原理:

     

    流程说明:

    l 服务提供者启动时

    n 向/dubbo/com.foo.BarService/providers目录下写入自己的URL地址。

    l 服务消费者启动时

    n 订阅/dubbo/com.foo.BarService/providers目录下的提供者URL地址。

    n 并向/dubbo/com.foo.BarService/consumers目录下写入自己的URL地址。

    l 监控中心启动时

    n 订阅/dubbo/com.foo.BarService目录下的所有提供者和消费者URL地址。

     

    支持以下功能:

    l 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息。

    l 当注册中心重启时,能自动恢复注册数据,以及订阅请求。

    l 当会话过期时,能自动恢复注册数据,以及订阅请求。

    l 当设置<dubbo:registry check="false" />时,记录失败注册和订阅请求,后台定时重试。

    l 可通过<dubbo:registry username="admin" password="1234" />设置zookeeper登录信息。

    l 可通过<dubbo:registry group="dubbo" />设置zookeeper的根节点,不设置将使用无根树。

    l 支持*号通配符<dubbo:reference group="*" version="*" />,可订阅服务的所有分组和所有版本的提供者。

    zkClient的使用:

     

     
    --------------------- 
    作者:niaobirdfly 
    来源:CSDN 
    原文:https://blog.csdn.net/hellozpc/article/details/78575773 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用
  • 阿里微服务框架dubbo教程.zip 1.dubbo的作用 2.安装 3.监控中心dubbo-admin 4.SpringMVC项目中使用Dubbo 各节点的功能 SPI Service Provider Interface服务发现机制 dubbo+zookeeper搭建HA集群 ...
  • dubbo 高级视频教程

    2018-03-27 17:28:29
    dubbo 高级视频教程 详细的实战教程讲解 微服务视频教程。附件是 txt 文件,内含网盘地址
  • dubbo教程代码案例

    2018-11-21 20:45:24
    dubbo教程代码demo
  • dubbo教程视频源码

    2018-11-07 18:34:32
    基础,高级,架构视频教程,文档,源码,非常全面的学习
  • dubbo 教程

    万次阅读 多人点赞 2014-10-08 17:54:11
    先给出阿里巴巴dubbo的主页:http://code.alibabatech.com/wiki/display/dubbo/Home-zh 自己的demo下载地址:http://download.csdn.net/detail/u012049463/6763315 1. Dubbo是什么? Dubbo是一个分布式服务框架,...
    
    先给出阿里巴巴dubbo的主页:http://code.alibabatech.com/wiki/display/dubbo/Home-zh

    自己的demo下载地址:http://download.csdn.net/detail/u012049463/6763315



    1. Dubbo是什么?

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

    2. Dubbo能做什么?

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

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


    3. dubbo的架构

    dubbo 架构图如下所示:

    节点角色说明:

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

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

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

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

           Container: 服务运行容器。

    调用关系说明:

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

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

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

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

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

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

    4. dubbo使用方法。

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

    http://code.alibabatech.com/wiki/display/dubbo/User+Guide-zh#UserGuide-zh-API%E9%85%8D%E7%BD%AE

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

    服务提供者:

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

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

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

    1. package com.unj.dubbotest.provider;
      
      import java.util.ArrayList;
      import java.util.LinkedList;
      import java.util.List;
      
      
      public class DemoService{
      	
      	 public 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(); // 为保证服务一直开着,利用输入流的阻塞来模拟
        }
     
    }

    服务消费者:

    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配置,并调用远程服务:
    调用结果为:


    dubbo管理页面:






    应用页面:

    展开全文
  • 最简单的dubbo教程-快速入门

    万次阅读 多人点赞 2017-12-26 14:29:34
    所需环境zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册。 可参考:http://blog.csdn.net/jingyangv587/article/details/78901508 注意:启动后,请勿关闭!开始搭建1. ...

    所需环境

    zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册。
    可参考:http://blog.csdn.net/jingyangv587/article/details/78901508
    注意:启动后,请勿关闭!

    开始搭建

    ###1. 服务提供方和消费方都需要的包(这里我新建的maven工程为pom工程,将共同的项目依赖写到pom.xml中)

    • 总的项目结构为
      这里写图片描述

    • pom.xml文件内容为

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.test</groupId>
      <artifactId>dubbo-demo</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>pom</packaging>
      
       <properties>
            <motan.version>0.3.0</motan.version>
            <!-- 在阿里巴巴内部广泛使用的GA版本为:2.4.9,强烈推荐此版本 -->
            <dubbo.version>2.5.3</dubbo.version>
            <dubbox.version>2.8.4</dubbox.version>
            <spring.version>4.3.6.RELEASE</spring.version>
            <java.version>1.7</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        
        <dependencies>
          <dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>dubbo</artifactId>
    			<version>2.5.3</version>
    			<exclusions>
    				<exclusion>
    					<groupId>org.springframework</groupId>
    					<artifactId>spring</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>com.github.sgroschupf</groupId>
    			<artifactId>zkclient</artifactId>
    			<version>0.1</version>
    		</dependency>
    		<!-- spring相关 -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-core</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-beans</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-web</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-aop</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-tx</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-orm</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context-support</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jms</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjrt</artifactId>
    			<version>1.6.11</version>
    		</dependency>
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjweaver</artifactId>
    			<version>1.6.11</version>
    		</dependency>
        </dependencies>
       <modules>
       	<module>demo-api</module>
       	<module>dubbo-consumer</module>
       	<module>dubbo-provider</module>
       </modules>
    </project>
    

    2. 在demo-api中定义服务接口(注意服务提供方和消费方都需要依赖这个项目)

    package com.test;
    
    public interface DemoService{  
         String sayHello(String name);  
    } 
    
    

    3. 服务提供方实现

    • 项目结构
      这里写图片描述
    • 实现接口
    package com.test;
    import org.springframework.stereotype.Service;
    
    import com.test.DemoService;
    @Service("demoService")
    public class DemoServiceImpl implements DemoService{
    
    	@Override
    	public String sayHello(String name) {
    		// TODO Auto-generated method stub
    		return name; 
    	}  
    }
    
    
    • 声明暴露服务:
    <?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="dubbo_provider"  />  
       
        <!-- 使用zookeeper注册中心暴露服务地址 -->  
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />   
        
        <!-- 用dubbo协议在20880端口暴露服务 -->  
        <dubbo:protocol name="dubbo" port="20880" />  
       
        <!-- 声明需要暴露的服务接口 -->  
        <dubbo:service interface="com.test.DemoService" ref="demoService" />  
    </beans>
    
    • 在springmvc.xml中扫描service注解并将dubbo-provider.xml中的相关的dubbo配置引入进来
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/aop   
            http://www.springframework.org/schema/aop/spring-aop-4.0.xsd   
            http://www.springframework.org/schema/beans   
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.0.xsd   
            http://www.springframework.org/schema/util 
            http://www.springframework.org/schema/util/spring-util-4.0.xsd"
    	default-autowire="byName">
    
        <aop:aspectj-autoproxy />
    	<context:component-scan base-package="com.test" />
    	<import resource="classpath:dubbo-provider.xml" />
    </beans>
    
    • 加载Spring配置,启动服务:
    package com.test;
    
    import java.io.IOException;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test {
    	public static void main(String[] args) throws Exception {
    		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:springmvc.xml");
    		context.start();
    		
    		System.out.println("Dubbo provider start...");
    		
    		try {
    			System.in.read();	// 按任意键退出
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
    	}
    }
    
    

    ###4. 服务消费者实现

    • 项目结构
      这里写图片描述
    • 在dubbo-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="dubbo_consumer" />       
          <!-- 使用multicast广播注册中心暴露发现服务地址 -->    
        <dubbo:registry  protocol="zookeeper" address="zookeeper://127.0.0.1:2181" />         
          <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->    
        <dubbo:reference id="demoService" interface="com.test.DemoService" />    
    </beans>   
    
    • 在springmvc.xml中扫描service注解并将dubbo-consumer.xml中的相关的dubbo配置引入进来
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/aop   
            http://www.springframework.org/schema/aop/spring-aop-4.0.xsd   
            http://www.springframework.org/schema/beans   
            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.0.xsd   
            http://www.springframework.org/schema/util 
            http://www.springframework.org/schema/util/spring-util-4.0.xsd"
    	default-autowire="byName">
    
        <aop:aspectj-autoproxy />
    	<context:component-scan base-package="com.test" />
    	<import resource="classpath:/dubbo-consumer.xml" />
    </beans>
    
    • 加载Spring配置,调用服务:
    package com.test;
    
    import java.io.IOException;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test {
    	public static void main(String[] args) {
    		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:springmvc.xml" });
    
    		context.start();
    		DemoService demoService = (DemoService) context.getBean("demoService");
    
    		System.out.println(demoService.sayHello("哈哈哈"));
    		try {
    			System.in.read();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    
    	}
    }
    
    
    • 如果出现以下结果则调用成功
      这里写图片描述
    • 通过dubbo-admin管理后台可以看到服务的提供方与消费方
      具体搭建可参考博客:http://blog.csdn.net/jingyangv587/article/details/78904369
      提供方
      这里写图片描述
      消费者
      这里写图片描述

    点击下载示例项目(含admin包)
    参考博客:https://www.cnblogs.com/Javame/p/3632473.html

    想进一步了解dubbo请移步我的另外的dubob相关的文章:https://blog.csdn.net/jingyangV587/article/details/84983770

    展开全文
  • 最新Dubbo的分布式架构视频教程最新Dubbo的分布式架构视频教程
  • 2019 dubbo 教程 吴水城 传智 黑马 等 最新整理 百度网盘 长久有效 失效加我
  • DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员...
  • 最新的尚硅谷出品Dubbo完整版教程 视频和课件均不加密
  • 最全最简单的dubbo教程-以XML的形式整合dubbo《二》

    千次阅读 热门讨论 2018-12-13 16:13:17
    目前官网给出了,四种整合dubbo的方式分别是,XML配置、属性配置、API配置、注解配置,详细说明见官网,这里就不再多说了。XML整合的案例在快速入门中已经有了,只不过不是与springboot方式整合的,所以这里再次整合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,646
精华内容 4,658
关键字:

dubbo教程