美文网首页
Dubbo提供者的禁用

Dubbo提供者的禁用

作者: 有梦想的虫子_2018 | 来源:发表于2022-04-01 15:49 被阅读0次

一、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提供者的禁用启用,是比其它几种方法都优的。

相关文章

网友评论

      本文标题:Dubbo提供者的禁用

      本文链接:https://www.haomeiwen.com/subject/hwhajrtx.html