目录
入门视频
zookeeper 搭建
下载
安装
单机部署
集群部署
dubbo admin搭建
下载并构建
创建 dubbo 服务提供者
创建dubbo服务消费者
spring boot与dubbo集成
重要参数解读
参数覆盖策略
启动时检查
请求超时
重试
https://www.bilibili.com/video/BV1zt411M7pF?p=18
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/
解压
tar -xzvf https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
重命名apache-zookeeper-3.6.2-bin文件夹为zk
mv apache-zookeeper-3.6.2-bin zk
进入到zk/conf下,复制一份zoo_example.cfg 文件并重命名为zoo.cfg
cp zoo_example.cfg zoo.cfg
如果是单机部署zoo.cfg无需做任何更改
执行启动命令
sh bin/zkServer.sh start
相关命令
sh zkServer.sh stop #: 停止
sh zkServer.sh restart #: 重启服务
sh zkServer.sh start #: 启动
sh zkServer.sh status #: 运行状态
#间隔都是使用tickTime的倍数来表示的,例如initLimit=10就是tickTime的十倍等于2W毫秒
tickTime=2000
# The number of ticks that can pass between, sending a request and getting an acknowledgement
# 心跳最大延迟时间,如果leader在规定的时间内无法获取到follow的心跳检测响应,则认为节点已脱离
syncLimit=5
# the directory where the snapshot is stored. do not use /tmp for storage, /tmp here is just. example sakes.
# 用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里
dataDir=/root/zookeeper-3.4.14/zkData
# the port at which the clients will connect,ZK端口
clientPort=2181
# the maximum number of client connections. increase this if you need to handle more clients
# 允许连接的客户端数目,0-不限制,通过 IP 来区分不同的客户端
maxClientCnxns=60
#将管理机器把事务日志写入到“ dataLogDir ”所指定的目录,而不是“ dataDir ”所指定的目录。避免日志和快照之间的竞争
#dataLogDir=/root/zookeeper-3.4.14/log/data_log
# The number of snapshots to retain in dataDir
#用于配置zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件,最小值时三,如果比3小,会自动调整为3
#autopurge.snapRetainCount=3
# Purge task interval in hours. Set to "0" to disable auto purge feature
#配套snapRetainCount使用,用于配置zk进行历史文件自动清理的频率,如果参数配置为0或者小于零,就表示不开启定时清理功能,默认不开启
#autopurge.purgeInterval=1
##集群配置
# The number of ticks that the initial, synchronization phase can take
# follow服务器在启动的过程中会与leader服务器建立链接并完成对数据的同步,leader服务器允许follow在initLimit时间内完成,默认时10.集群量增大时
#同步时间变长,有必要适当的调大这个参数, 当超过设置倍数的 tickTime 时间,则连接失败
initLimit=10
#server.A=B:C:D:其中 A 数字,表示是第几号服务器. dataDir目录下必有一个myid文件,里面只存储A的值,ZK启动时读取此文件,与下面列表比较判断是哪个server
# B 是服务器 ip ;C表示与 Leader 服务器交换信息的端口;D 表示的是进行选举时的通信端口。
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
# 配置成observer模式
#peerType=observer
# 注意观察者角色的末尾,需要拼接上observer
#server.4=10.2.143.38:2886:3886:observer
在每台机器下的dataDir 文件夹下创建myid 文件 ,myid中配置每台机器的序号
zk admin 访问地址
http://192.168.48.71:8888/commands
当zk admin占用8080端口时,可通在zoo.cfg文件中配置admin.serverPort
admin.serverPort=8888
#开放四字命令客户端
4lw.commands.whitelist=*
在 zkEnv.sh中添加如下配置,可以开放zk 的JMX连接,从而可以通过JConsole去连接
export JVMFLAGS=" -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xms1024m -Xmx2048m $JVMFLAGS"
git clone https://github.com/apache/dubbo-admin.git
cd dubbo-admin
mvn clean package
cd dubbo-admin-distribution/target
java -jar dubbo-admin-0.3.0-SNAPSHOT.jar
java 虚拟机参数 > XML > properties
-Ddubbo.protocol.port =9092 >
会在启动时检查依赖的服务是否可用,不可用时会抛出异常。
可以通过 check="false"
关闭检查。
1.通过 spring 配置文件
关闭某个服务启动时检查
关闭所有服务的启动时检查
关闭注册中心启动时检查
2.通过 dubbo.properties 配置
dubbo.reference.com.foo.BarService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
3. 通过 -D 参数
java -Ddubbo.reference.com.foo.BarService.check=false
java -Ddubbo.reference.check=false
java -Ddubbo.consumer.check=false
java -Ddubbo.registry.check=false
消费端与服务提供端都可以设置超时时间,消费端的配置优先于服务提供者端
指定接口的超时配置 > reference.timeout > consumer.timeout (有点问题)
rpc接口调用超时的情况下,如果调用超时或者网络抖动导致请求失败,请求需要重试(重试的次数不包含第一次)
java -Ddubbo.reference.com.foo.BarService.retries=1
java -Ddubbo.reference.retries=1
java -Ddubbo.consumer.retries=1
重试涉及到一个接口的幂等性问题。支持重试的接口必须是幂等的,不幂等的接口是不能重试的。接口的幂等性问题会在另一篇文章中介绍,不在此进行讨论。幂等性
远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做 ThreadLocal 缓存,提前验证参数,调用失败后伪造容错数据等等,此时就需要在 API 中带上 Stub,客户端生成 Proxy 实例,会把 Proxy 通过构造函数传给 Stub 1,然后把 Stub 暴露给用户,Stub 可以决定要不要去调 Proxy。