Dubbo提供者的禁用

一、dynamic动态注册

dynamic
服务是否动态注册,如果设为false,注册后将显示为disable状态,需人工启用,并且服务提供者停止时,也不会自动取消注册,需人工禁用。
@Service注解

org.apache.dubbo.config.annotation.Service

dubbo2.7.2以前

boolean dynamic() default false;

dubbo2.7.2及2.7.2以后

boolean dynamic() default true;
image.png

dynamic在service上的默认值变了


image.png

参考官方文档:XML配置 dubbo:service
当把dynamic=false配置到registry和provider上时

按照dubbo配置生效规则 :

  • 方法级优先,接口级次之,全局配置再次之。
  • 如果级别一样,则消费方优先,提供方次之。
    所以dynamic并没有生效,想要生效必须配置在service上
@Slf4j
@Service(dynamic = false,  version = "1.0.0")
public class UserAuthServiceImpl implements UserAuthService 

但是dynamic参数并不会产生禁用dubbo提供者的效果
dynamic=false提供者启动时,服务同样会被注册到zookeeper。消费者也会调用到相对应的服务。
当提供者停止后,dynamic=true的服务的连接在zookeeper上会消失,但是dynamic=false的服务的连接还会保存在zookeeper上,不会消失。
dynamic关键字只是控制dubbo提供者停止后,zk上这些节点消不消失,并不是控制服务可不可以访问。

image.png

二、依赖dubbo-admin的动态配置去实现禁用dubbo提供者

由于ip是动态的,采用application name的方式

以user-center-provider为例

1、给提供者的dubbo取一个新的名字

dubbo:
  application:
    id: user-center-provider-mc
    name: user-center-provider-mc

2、在dubbo-admin上添加动态配置规则

image.png
# 将应用user-center-provider-mc(user-center-provider-mc)在20880端口上提供(side:provider)的所有服务(scope:application)都禁用。
configVersion: v2.7
enabled: true
scope: application
key: user-center-provider-mc
configs: # dynamic config parameter
  - side: provider  # effective side, consumer or addresses
    addresses: 
       - '0.0.0.0:20880'  # 0.0.0.0 for all addresses
    parameters:
      disabled: true
      timeout: 6000 

  • configVersion 表示 dubbo 的版本
  • scope表示配置作用范围,分别是应用(application)或服务(service)粒度。必填。
  • key 指定规则体作用在哪个服务或应用。必填。
    • scope=service时,key取值为[{group}:]{service}[:{version}]的组合
  • scope=application时,key取值为application名称
  • enabled=true 覆盖规则是否生效,可不填,缺省生效。
  • configs 定义具体的覆盖规则内容,可以指定n(n>=1)个规则体。必填。
    • side,
    • applications
    • services
    • parameters
    • addresses
    • providerAddresses

参考官方文档:配置规则

3、启用被禁用的提供者服务

image.png

image.png

# 将应用user-center-provider-mc(user-center-provider-mc)在20880端口上提供(side:provider)的所有服务(scope:application)都启用。
configVersion: v2.7
enabled: true
scope: application
key: user-center-provider-mc
configs: # dynamic config parameter
  - side: provider  # effective side, consumer or addresses
    addresses: 
       - '0.0.0.0:20880'  # 0.0.0.0 for all addresses
    parameters:
      disabled: false
      timeout: 6000 

提前取好name、配置好动态规则,再去部署提供者就可禁用dubbo服务。
但是dubbo-admin只有先部署服务才能配置规则


image.png

三、dubbo自定义参数配合dubbo-admin实现禁用dubbo提供者

参考官方文档:XML配置 dubbo:parameter

1、dubbo进行配置

dubbo: 
    provider: 
       parameters: 
           disabled: true

2、部署服务

取新的applicaton name 和不取新applicaton name,结合下面【3、dubbo-admin动态配置】选择一种

dubbo: 
  application: 
    id: user-center-provider 
    name: user-center-provider

3、dubbo-admin动态配置,启用提供者

动态配置分两种,取新的applicaton name 和不取applicaton name

3.1 取新的applicaton name

image.png
# 将应用user-center-provider-m1(user-center-provider-mc)在20880端口上提供(side:provider)的所有服务(scope:application)都启用。
configVersion: v2.7
enabled: true
scope: application
key: user-center-provider-m1
configs: # dynamic config parameter
  - side: provider  # effective side, consumer or addresses
    addresses: 
       - '0.0.0.0:20880'  # 0.0.0.0 for all addresses
    parameters:
      disabled: false
      timeout: 6000

3.2 不取新的applicaton name

限制的地址需要修改


image.png

# 将应用user-center-provider-m1(user-center-provider-mc)在20880端口上提供(side:provider)的所有服务(scope:application)都启用。
configVersion: v2.7
enabled: true
scope: application
key: user-center-provider-m1
configs: # dynamic config parameter
  - side: provider  # effective side, consumer or addresses
    addresses: 
       - '192.168.0.10:20880'  # 0.0.0.0 for all addresses
    parameters:
      disabled: false
      timeout: 6000 

四、通过修改权重,实现禁用dubbo提供者

修改权重weight

dubbo:
  provider:
    weight: 0

经过测试的用例:

3节点: 2个节点权重100,1 个节点权重0 ,权重0的不可以访问
3节点:3个节点权重都是0,都可以访问
2节点: 2个节点权重都是0,都可以访问
2节点:1个节点权重100 ,1个节点权重0 ,权重0的不可以访问
例如:
user-center-provider 老节点的权重默认100,节点为A和B。
更改apollo配置weight=0,启动服务创建C和D。
同时存在四个节点A、B、C、D。由于C和D权重为0,所以流量只会进入A、B。
当A、B停止时,流量会进入C、D,此时与权重值是否为0无关了。
老节点停止,新节点瞬间可用
引发的思考:并发访问量大的情况下,老节点停止,到新节点启用,这之间的数据同步会不会有问题?

目前来看通过修改权重,实现禁用dubbo提供者的禁用启用,是比其它几种方法都优的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容