dubbo教程

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

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

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

在这里插入图片描述在这里插入图片描述dubbo教程_第1张图片

 

推荐 spring cloud 微服务教程:

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

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

 

             技术公众号【程猿薇茑】

dubbo教程_第2张图片
 

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中配置:





nexus-aliyun

*

Nexus aliyun

http://maven.aliyun.com/nexus/content/groups/public



构建完成:

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

 

一路next,直到finish。

 

5.3.2. 导入依赖

 

编辑模块systemB的pom文件:

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



    

        dubbodemo

        cn.com.zpc

        1.0-SNAPSHOT

    

    4.0.0

    systemB

    war

    systemB Maven Webapp

    http://maven.apache.org

    

        

            junit

            junit

            3.8.1

            test

        

        

        

            org.springframework

            spring-webmvc

            4.3.10.RELEASE

        

        

            org.slf4j

            slf4j-log4j12

            1.6.4

        

        

            com.alibaba

            dubbo

            2.5.7

            

            

                

                    spring

                    org.springframework

                

                

                    spring-web

                    org.springframework

                

                

                    spring-beans

                    org.springframework

                

                

                    spring-context

                    org.springframework

                

            

        

    

    

        systemB

        

            

                org.apache.tomcat.maven

                tomcat7-maven-plugin

                2.2

                

                    8081

                    /

                

            

        

    

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{
    /**
     * 查询所有的用户数据
     */
    publicListqueryAll();
}

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
    publicListqueryAll() {
        Listlist =new ArrayList();
        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

 

具体配置:


    
    
    
    
    
    
    
    
    
    

5.3.8. 导入zookeeper依赖



org.apache.zookeeper

zookeeper

3.4.8





com.github.sgroschupf

zkclient

0.1

5.3.9. 编写Web.xml





dubbo-b



contextConfigLocation

classpath:dubbo/dubbo-*.xml







org.springframework.web.context.ContextLoaderListener



    

     index.jsp

    

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:


    
    
    
    
    
    

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() {
        Listusers =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>
    cn.com.zpc
    dubbo_systemB_api
    1.0-SNAPSHOT

修改dubbo-provider.xml

<

!-- 将该接口暴露到dubbo中 -->

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

<

dependency>
    cn.com.zpc
    dubbo_systemB_api
    1.0-SNAPSHOT

修改dubbo-consumer.xml


 

此时目录结构如下(只有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. 

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

标签

属性

对应URL参数

类型

是否必填

缺省值

作用

描述

兼容性

id

 

string

可选

dubbo

配置关联

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

2.0.5以上版本

name

string

必填

dubbo

性能调优

协议名称

2.0.5以上版本

port

int

可选

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

服务发现

服务端口

2.0.5以上版本

host

string

可选

自动查找本机IP

服务发现

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

2.0.5以上版本

threadpool

threadpool

string

可选

fixed

性能调优

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

2.0.5以上版本

threads

threads

int

可选

100

性能调优

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

2.0.5以上版本

iothreads

threads

int

可选

cpu个数+1

性能调优

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

2.0.5以上版本

accepts

accepts

int

可选

0

性能调优

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

2.0.5以上版本

payload

payload

int

可选

88388608(=8M)

性能调优

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

2.0.5以上版本

codec

codec

string

可选

dubbo

性能调优

协议编码方式

2.0.5以上版本

serialization

serialization

string

可选

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

性能调优

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

2.0.5以上版本

accesslog

accesslog

string/boolean

可选

 

服务治理

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

2.0.5以上版本

path

string

可选

 

服务发现

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

2.0.5以上版本

transporter

transporter

string

可选

dubbo协议缺省为netty

性能调优

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

2.0.5以上版本

server

server

string

可选

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

性能调优

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

2.0.5以上版本

client

client

string

可选

dubbo协议缺省为netty

性能调优

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

2.0.5以上版本

dispatcher

dispatcher

string

可选

dubbo协议缺省为all

性能调优

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

2.1.0以上版本

queues

queues

int

可选

0

性能调优

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

2.0.5以上版本

charset

charset

string

可选

UTF-8

性能调优

序列化编码

2.0.5以上版本

buffer

buffer

int

可选

8192

性能调优

网络读写缓冲区大小

2.0.5以上版本

heartbeat

heartbeat

int

可选

0

性能调优

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

2.0.10以上版本

telnet

telnet

string

可选

 

服务治理

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

2.0.5以上版本

register

register

boolean

可选

true

服务治理

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

2.0.8以上版本

contextpath

contextpath

String

可选

缺省为空串

服务治理

 

2.0.6以上版本

 

7.2. 协议

dubbo提供的协议有:

 

7.2.1. dubbo://

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

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

配置:

 

执行过程:

 

默认连接:

限制最大连接:

 

7.3. 

注册中心配置:

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

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

 

标签

属性

对应URL参数

类型

是否必填

缺省值

作用

描述

兼容性

id

 

string

可选

 

配置关联

注册中心引用BeanId,可以在中引用此ID

1.0.16以上版本

address

string

必填

 

服务发现

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

1.0.16以上版本

protocol

string

可选

dubbo

服务发现

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

2.0.0以上版本

port

int

可选

9090

服务发现

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

2.0.0以上版本

username

string

可选

 

服务治理

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

2.0.0以上版本

password

string

可选

 

服务治理

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

2.0.0以上版本

transport

registry.transporter

string

可选

netty

性能调优

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

2.0.0以上版本

timeout

registry.timeout

int

可选

5000

性能调优

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

2.0.0以上版本

session

registry.session

int

可选

60000

性能调优

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

2.1.0以上版本

file

registry.file

string

可选

 

服务治理

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

2.0.0以上版本

wait

registry.wait

int

可选

0

性能调优

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

2.0.0以上版本

check

check

boolean

可选

true

服务治理

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

2.0.0以上版本

register

register

boolean

可选

true

服务治理

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

2.0.5以上版本

subscribe

subscribe

boolean

可选

true

服务治理

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

2.0.5以上版本

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 当设置时,记录失败注册和订阅请求,后台定时重试。

l 可通过设置zookeeper登录信息。

l 可通过设置zookeeper的根节点,不设置将使用无根树。

l 支持*号通配符,可订阅服务的所有分组和所有版本的提供者。

zkClient的使用:

 

 

 

 

推荐 spring cloud 微服务教程:

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

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

你可能感兴趣的:(Java)