Spring 集成 dubbo 集群实现服务降级

发布于 2024-12-17 08:40:01 字数 6687 浏览 3 评论 0

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.cfgserver. 后数字

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 配置文件详解

  1. Dubbo 用户手册
  2. Dubbo 开发者指南
  3. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

治碍

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

lixs

文章 0 评论 0

敷衍 

文章 0 评论 0

盗梦空间

文章 0 评论 0

tian

文章 0 评论 0

13375331123

文章 0 评论 0

你对谁都笑

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文