dubbo 入门

目录

入门视频

 

zookeeper 搭建

下载

安装

单机部署

集群部署

dubbo admin搭建

下载并构建

创建 dubbo 服务提供者

创建dubbo服务消费者

spring boot与dubbo集成

重要参数解读

参数覆盖策略

启动时检查

请求超时

重试



入门视频

https://www.bilibili.com/video/BV1zt411M7pF?p=18

 

zookeeper 搭建

下载

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"

 

 

dubbo admin搭建

下载并构建

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

创建 dubbo 服务提供者

 

创建dubbo服务消费者

 

 

spring boot与dubbo集成

 

重要参数解读

 

参数覆盖策略

java 虚拟机参数 > XML > properties

-Ddubbo.protocol.port =9092            > dubbo.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。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(分布式-高并发)