Spring 集成 dubbo 集群实现服务降级
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。
dubbo 源码地址
https://github.com/alibaba/dubbo
- 进入下载 dubbo-admin 管理界面源码,进行 maven 打包 把打包 war 包部署到 tomcat
- 打包 war 包,进入 dubbo-admin 这个文件目录 运行命令:
mvn package -Dmaven.skip.test=true
- zookeeper 安装 windows 环境
- 在 apache 的官方网站提供了好多镜像下载地址,然后找到对应的版本
下载地址:
https://mirrors.cnnic.cn/apache/zookeeper/ - 把下载的 zookeeper 的文件解压到指定目录
- 修改 conf 下增加一个 zoo.cfg,可以用 zoo_sample.cfg 内内容替代
安装完成进入 bin 目录启动 zkServer.cmd 命令
# The number of milliseconds of each tick 心跳间隔 毫秒每次
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
#多少个心跳时间内,允许其他 server 连接并初始化数据,如果 ZooKeeper 管理的数据较大,则应相应增大这个值
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
#多少个 tickTime 内,允许 follower 同步,如果 follower 落后太多,则会被丢弃
syncLimit=5
# the directory where the snapshot is stored.
#日志位置
dataDir=F:\\zookeeper-3.3.6\\logs
# the port at which the clients will connect 监听客户端连接的端口
clientPort=2181
w 系统伪集群安装
- 在 一台机器上通过伪集群运行时可以修改 zkServer.cmd 文件在里面加入
set ZOOCFG=..\conf\zoo1.cfg
这行,另存为zkServer-1.cmd
如果有多个可以以此类推
还需要 在对应的
/tmp/zookeeper/1,
/tmp/zookeeper/2,
/tmp/zookeeper/3
建立一个文本文件命名为 myid
,内容就为对应的 zoo.cfg
里 server.
后数字
Linux 环境下安装
安装
wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
tar zxvf zookeeper-3.3.3.tar.gz
cd zookeeper-3.3.3
cp conf/zoo_sample.cfg conf/zoo.cfg
配置
vi conf/zoo.cfg
如果不需要集群,zoo.cfg 的内容如下 2:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/dubbo/zookeeper-3.3.3/data
clientPort=2181
如果需要集群,zoo.cfg 的内容如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/dubbo/zookeeper-3.3.3/data
clientPort=2181
server.1=10.20.153.10:2555:3555
server.2=10.20.153.11:2555:3555
并在 data 目录 4 下放置 myid 文件:
mkdir data
vi myid
myid 指明自己的 id,对应上面 zoo.cfg 中 server. 后的数字,第一台的内容为 1,第二台的内容为 2
启动
./bin/zkServer.sh start
停止
./bin/zkServer.sh stop
命令行 5
telnet 127.0.0.1 2181
dump
Dubbo 架构
- Provider: 暴露服务的服务提供方。
- Consumer: 调用远程服务的服务消费方。
- Registry: 服务注册与发现的注册中心。
- Monitor: 统计服务的调用次调和调用时间的监控中心。
- Container: 服务运行容器。
- ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。
Dubbo 提供的注册中心有如下几种类型
- Multicast 注册中心
- Zookeeper 注册中心
- Redis 注册中心
- Simple 注册中心
Dubbo 优缺点
- 优点:
- 透明化的远程方法调用
- 像调用本地方法一样调用远程方法;只需简单配置,没有任何 API 侵入。
- 软负载均衡及容错机制
- 可在内网替代 nginx lvs 等硬件负载均衡器。
- 服务注册中心自动注册 & 配置管理
- 不需要写死服务提供者地址,注册中心基于接口名自动查询提供者 ip。
- 使用类似 zookeeper 等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入 zookeeper 集群。
- 服务接口监控与治理
- Dubbo-admin 与 Dubbo-monitor 提供了完善的服务接口管理与监控功能,针对不同应用的不同接口,可以进行 多
版本,多协议,多注册中心管理 - 缺点:只支持 JAVA 语言
Dubbo 中 zookeeper 做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?
- 可以的,启动 dubbo 时,消费者会从 zk 拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用
- 可以,消费者本地有一个生产者的列表,他会按照列表继续工作,倒是无法从注册中心去同步最新的服务列表,短期的注册中心挂掉是不要紧的,但一定要尽快修复
Dubbo 在安全机制方面是如何解决的
Dubbo 通过 Token 令牌防止用户绕过注册中心直连,然后在注册中心上管理授权。Dubbo 还提供服务黑白名单,来控制服务所允许的调用方。
dubbo 配置文件详解
<dubbo:service/> 要暴露服务的接口 个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。
<dubbo:service interface="com.qxw.service.UserService" ref="userService" />
<dubbo:reference/> 引用服务配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。
<dubbo:reference id="demoService" interface="com.unj.dubbotest.provider.DemoService" />
<dubbo:protocol/> 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
<!-- 用 dubbo 协议在 28080 端口暴露服务 -->
<dubbo:protocol name="dubbo" port="28080" />
<dubbo:application/> 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
<!-- 应用名称 -->
<dubbo:application name="service_provider" />
<dubbo:registry/> 注册中心配置,用于配置连接注册中心相关信息。
<!-- 使用 zookeeper 注册中心暴露服务地址 连接到哪个本地注册中心 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<dubbo:module/> 模块配置,用于配置当前模块信息,可选。
<dubbo:monitor/> 监控中心配置,用于配置连接监控中心相关信息,可选。
<dubbo:provider/> 提供方的缺省值,当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选。
<dubbo:consumer/> 消费方缺省配置,当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选。
<dubbo:method/> 方法配置,用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息。
<dubbo:argument/> 用于指定方法参数配置。
dubbo 实现服务降级
- 查看 dubbo 的官方文档,可以发现有个 mock 的配置,mock 只在出现非业务异常(比如超时,网络异常等) 时执行。mock 的配置支持两种
- 一种为 boolean 值,默认的为 false。如果配置为 true,则缺省使用 mock 类名,即类名+Mock 后缀;
- 接口名要注意命名规范:接口名+Mock 后缀。此时如果调用失败会调用 Mock 实现;
- 另外一种则是配置
return null
,可以很简单的忽略掉异常。
在服务消费者放的增加 mock 就可以实现服务降级
<dubbo:reference interface="com.qxw.service.UserService" id="userService" check="false" timeout="10000" mock="return null" />
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: eureka 注册中心访问权限
下一篇: 可视化 Python 包之间的关系
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论