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

dubbo源码地址

https://github.com/alibaba/dubbo

  • 进入下载dubbo-admin管理界面源码,进行maven打包 把打包war包部署到tomcat
  • 打包war包,进入dubbo-admin这个文件目录 运行命令:
    1
    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命令
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 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
    ![输入图片说明](https://gitee.com/uploads/images/2018/0112/110016_3b751c35_1478371.png "屏幕截图.png")

如果有多个可以以此类推
输入图片说明
输入图片说明

输入图片说明
输入图片说明

输入图片说明
还需要 在对应的

/tmp/zookeeper/1,

/tmp/zookeeper/2,

/tmp/zookeeper/3

建立一个文本文件命名为myid,内容就为对应的zoo.cfg里server.后数字

Linux环境下安装

  • 安装:
1
2
3
4
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
  • 配置:
    1
    vi conf/zoo.cfg
    如果不需要集群,zoo.cfg 的内容如下 2:
    1
    2
    3
    4
    5
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/home/dubbo/zookeeper-3.3.3/data
    clientPort=2181
    如果需要集群,zoo.cfg 的内容如下
    1
    2
    3
    4
    5
    6
    7
    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 文件:
    1
    2
    mkdir data
    vi myid
    myid 指明自己的 id,对应上面 zoo.cfg 中 server. 后的数字,第一台的内容为 1,第二台的内容为2
    1
    2
    3
    4
    5
    6
    7
    8
    9
    启动:

    ./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管理员手册
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <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”,可以很简单的忽略掉异常。
1
2
3
在服务消费者放的增加mock就可以实现服务降级

<dubbo:reference interface="com.qxw.service.UserService" id="userService" check="false" timeout="10000" mock="return null" />
本文原创,商业转载请联系作者获得授权,非商业转载请注明出处。

评论

发送评论 编辑评论


                        

待分类分类热门文章

标签热门文章排行

☛免责声明 ☛本站使用教程
Theme Argon With Ry-Plus By 清欢
我的第16391位朋友,历经92684次回眸才与你相遇