本教程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、 了解什么是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
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。Dubbo框架使得使用者可以像调用本地方法一样调用远程方法,而这一切只需要简单的配置。Dubbo完全兼容Spring配置方式注入,也与Spring boot无缝整合。
开发团队:
http://dubbo.io/
2017年9月份,沉寂了5年之久的Dubbo重新得到维护!
本教程基于2.5.7版本
Dubbo源码托管于github,并且将jar包发布到maven的中央仓库,所以可以从github和maven中央仓库来下载。
https://github.com/alibaba/dubbo
http://repo1.maven.org/maven2/com/alibaba/dubbo/
既然可以下载得到源码以及发布包,那么为什么要去构建dubbo呢?我们先来看下dubbo的主要模块:
其中,核心框架、管理控制台、简易监控中心、简易注册中心是我们需要的模块。目前只有核心模块jar包可以下载到,其它的均无法直接下载,所以我们需要构建dubbo。
从githhub上下载dubbo源码得到dubbo-master.zip:
https://github.com/alibaba/dubbo
解压压缩包:
导入源码到IDEA:
右侧Maven Projects有红色报错信息,报maven插件无法加载,这个不要紧,待会编译打包Reimport一下即可!
如果POM文件有些划红线的地方也可不管,编译报错再详细分析。切勿编辑pom文件,可能造成一些换行等,编译pom文件会报无法解析(人品好的话编译不会报错,一次成功!)
在构建之前,各个源码包下面还没有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] ------------------------------------------------------------------------
调用关系:
1. 服务容器负责启动,加载,运行服务提供者。
2. 服务提供者在启动时,向注册中心注册自己提供的服务。
3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
假设现在需要开发2个独立的业务系统,B系统和A系统。A系统调用B系统暴露的接口获取数据,比如查询用户列表。
要运行dubbo,首先需要搭建一个注册中心,比如使用zk作为服务注册中心
zk安装包解压如下:
修改配置文件conf/zoo.cfg:设置data目录,该目录必须存在。
双击zkServer启动zookeeper服务(cmd文件是windows脚本,sh文件是linux下的脚本):
新建一个maven项目
新建模块
上一步也可以不选骨架,这样生成的目录没有webapp目录,需要手动创建!并且手动改pom文件的packing类型为war
<packaging>warpackaging>
一路next,直到finish。
编辑模块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
/
在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
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;
}
}
package com.zpc.dubbo.systemb.service;
import com.zpc.dubbo.systemb.pojo.User;
import java.util.List;
public interface UserService{
/**
* 查询所有的用户数据
*/
publicListqueryAll();
}
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;
}
}
dubbo-provider.xml
具体配置:
org.apache.zookeeper
zookeeper
3.4.8
com.github.sgroschupf
zkclient
0.1
dubbo-b
contextConfigLocation
classpath:dubbo/dubbo-*.xml
org.springframework.web.context.ContextLoaderListener
index.jsp
使用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控制台显示收到连接:
步骤可以参照搭建B系统!A系统创建完成:
A系统的pom文件:参考B系统,一模一样!
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
注意是从B系统完全拷贝到A系统,包名不能改动!
dubbo-consumer.xml:
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);
}
}
}
(重写了User的toString方法!)
把zookeeper、B系统运行起来,再运行A系统的测试用例:
可以看到,已经查询到10条数据,那么,也就是说A系统通过B系统提供的服务获取到了数据。
通过刚刚的示例我们可以发现,其中User对象和UserService在A系统和B系统中都使用,那么,我们是否应该将该代码复用,而不用硬拷贝?
答案是肯定的。
在使用dubbo时,provider需要将提供服务所需要的java代码(bean、interface等)单独打包成jar提供给consumer使用。
注意:B系统和A系统的pojo与service接口全部删除,全部直接依赖dubbo-systemB-api!
<
dependency>
cn.com.zpc
dubbo_systemB_api
1.0-SNAPSHOT
修改dubbo-provider.xml
<
!-- 将该接口暴露到dubbo中 -->
<
dependency>
cn.com.zpc
dubbo_systemB_api
1.0-SNAPSHOT
修改dubbo-consumer.xml
此时目录结构如下(只有api包中保留接口和pojo类定义):
测试之前先rebuild项目!
依次启动zookeeper和系统B,再运行系统A中的测试用例!
测试,发现,和之前实现一样。
其实也可以把接口保留B系统中(毕竟B系统提供的服务嘛)。然后在A系统中直接依赖B系统的jar包即可。
dubbo提供了一套在线管理整个服务的功能,管理控制台为阿里内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。
将dubbo-admin-2.5.7.war部署到tomcat的webapps目录下的ROOT目录里:
使用如下用户登录(密码和用户名一致,如root/root):
登录http://127.0.0.1:8080/
Tomcat端口未必是8080,看自己怎么配的。
效果:
功能:
提供者:
消费者:
应用:
服务提供者协议配置:
配置类:com.alibaba.dubbo.config.ProtocolConfig
说明:如果需要支持多协议,可以声明多个
标签 |
属性 |
对应URL参数 |
类型 |
是否必填 |
缺省值 |
作用 |
描述 |
兼容性 |
|
id |
|
string |
可选 |
dubbo |
配置关联 |
协议BeanId,可以在 |
2.0.5以上版本 |
|
name |
|
string |
必填 |
dubbo |
性能调优 |
协议名称 |
2.0.5以上版本 |
|
port |
|
int |
可选 |
dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80 |
服务发现 |
服务端口 |
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以上版本 |
dubbo提供的协议有:
Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
配置:
执行过程:
默认连接:
限制最大连接:
注册中心配置:
配置类:com.alibaba.dubbo.config.RegistryConfig
说明:如果有多个不同的注册中心,可以声明多个
标签 |
属性 |
对应URL参数 |
类型 |
是否必填 |
缺省值 |
作用 |
描述 |
兼容性 |
|
id |
|
string |
可选 |
|
配置关联 |
注册中心引用BeanId,可以在 |
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以上版本 |
原理:
流程说明:
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 可通过
l 可通过
l 支持*号通配符
zkClient的使用:
推荐 spring cloud 微服务教程:
https://blog.csdn.net/hellozpc/article/details/84144453
https://blog.csdn.net/hellozpc/article/details/83692496