dubbo-环境隔离

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo-环境隔离相关的知识,希望对你有一定的参考价值。

参考技术A         大家在平时开发和测试阶段定位一些bug的时候,需要调用本地启动的dubbo服务debug。如果与服务器、其他同事共用一个注册中心的话,就会调用到别人的服务或者自己本地的服务被别人调用到,造成一些调用失败或者其他异常。

       解决如上问题有大致几种解决方案:

       1、dubbo直连;

       2、dubbo group 服务分组;

       3、dubbo version 版本过渡;

        在开发以及测试环境下,经常需要绕过注册中心,只测试指定服务的提供者,这时候可  以使用点对点直连的方式。点对点直连方式,将以服务接口为单位,忽略注册中心的提供者表。A接口配置点对点,不影响B接口从注册中心获取列表。

      消费者应用,在注入的提供者api上添加 @Reference(version = "1.0.0", url = "dubbo://ip:port") 即可!

      此时,如果提供者不希望本地的服务被别人调用到,设置:dubbo.registry.register=false,默认值是true。该属性含义: 是否向此注册中心注册服务,如果设为false,将只订阅,不注册。

        通过服务分组实现环境隔离,不用绕过注册中心,大家可以共用一个注册中心。服务注册分组,使跨组的服务不会相互影响,也无法相互调用,适用于环境隔离。

      场景:服务A希望调用到本地的服务B(此时,B服务正常的调用远程服务C),而不是远程服务B。

      本地服务B的配置设置如下:                                                                                                          //应用全局配置                                                                              dubbo.provider.group=local-group   //设置本地B所提供的dubbo服务均在local-group分组下如图:

       //针对某个Api进行配置

      也可以针对某个api单独做分组,例如:@Service(version = "1.0.0",group = "local-group")服务A:在注入的B dubbo服务的api上加 @Reference(version = "1.0.0", group = "local-group")  即可。

      服务分组的几个属性解释:

1、dubbo.registry.group=local-group 

          该值自行定义,确保唯一即可,该属性含义:服务注册分组,跨组的服务不会相互影响,也无法相互调用,适用于环境隔离。 该配置不推荐配置,配置之后服务在dubbo admin上默认无法查看,也调用不到该服 务。不同环境,通过zookeeper做数据隔离。

            

      2、dubbo.provider.group=local-group  

       该属性含义:服务分组,当一个接口有多个实现,可以用分组区分。该配置使当前服务所有的提供者都在local-group下。也可以只针对某个api做配置@Service(version ="1.0.0",group ="local-group");推荐后者!

     3、dubbo.consumer.group=local-group 

           该配置使当前服务只消费local-group分组下的提供者,建议只针对某个api进行配置即可,例如: @Reference(version ="1.0.0", group ="local-group")

            当一个接口的实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。dubbo.provider.version=1.0 //服务版本, 建议使用两位数字版本,如:1.0 ,通常在接口不兼容时版本号才需要升级。

 dubbo.consumer.version=1.0 //消费1.0版本的提供者

 可全局配置,亦可配置到某个api服务上,此时优先级大于全局配置。

 提供者服务示例:@Service(version ="your version")

 消费者api服务示例: @Reference(version ="your version")

使用 dubbo.provider.group 来隔离服务(附源码)

有这样一种场景:
一组Dubbo服务已经部署了,现在要再部署一组同样的dubbo服务,
要求二者访问隔离,但是共享zookeeper。
所谓访问隔离,
就是第一组的consumer只能请求到第一组的provider;
第二组的consumer只能请求到第二组的provider。

实现的方式不唯一,以下提供一种,亲测有效:
provider 的配置文件中:

dubbo:
  application:
    name: dubbo-springboot-demo-provider
  protocol:
    name: dubbo
    port

以上是关于dubbo-环境隔离的主要内容,如果未能解决你的问题,请参考以下文章

使用 dubbo.provider.group 来隔离服务(附源码)

Dubbo3高级特性「框架与服务」服务端通过线程池隔离技术实现资源限制和资源隔离机制

Dubbo服务调用隔离这么玩对么

Python环境隔离神器-Pyenv

虚拟隔离环境详解

Maven环境隔离