背景阐述

前几天,有位同学问我一个关于 Dubbo 的问题。他的诉求是这样子的:

诉求一

第一个诉求是本地开发的时候想自己调用自己的服务,比如自己在改 A 服务,然后出问题了,本地再启动一个 B 服务,A 服务调用 B 服务直接排查问题。

目前的问题是用的同一个注册中心,所以会调用到其他的服务实例。

还有就是去网上找了一些文章的资料,按照资料上的配置没有效果,也就是在@Reference 配置 url 来指定调用的服务地址。

配置如下:

@Reference(url="dubbo://localhost:20880")

诉求二

目前他们的测试环境没有使用 Docker 来部署,而且每个服务只部署了一个实例。问题就是当一个项目并行开发时有多个分支,这些分支得合并后一起部署测试。经常会出现代码冲突等问题。

还有就是快要上线时,需要下掉其他的分支做回归测试。但是会出现其他团队也要同一天上线,就只能协商等待来解决。

最好的方式就是可以实现一个分支部署一个实例,对于他们目前的这个规模和投入这个暂时做不了。所以他向我请教,有没有什么更好更快的方式。

解决方案

既然找了我,我还是给出一些建议吧,不一定很好,仅供参考。

诉求一解决方案

@Reference

在@Reference 中指定 url 是可以的,只是那位同学配置的地址有问题,在地址后面应该加上接口和版本的信息。

@Reference(url="dubbo://localhost:20880/com.xxx.xxx:1.0")

本地配置文件

在@Reference 中指定 url 不好的方式就是跟代码耦合了,很容易出现将这种代码提交的情况。所以我们介绍另一种方式。

在自己电脑的用户目录下建一个 dubbo-resolve.properties 文件,路径是 ${user.home}/dubbo-resolve.properties ,然后文件里配置好需要直连的服务信息,不需要修改本地工程的其他配置信息。

dubbo-resolve.properties

com.xxx.xxx=dubbo://localhost:20880/com.xxx.xxx:1.0.0

com.xxx.xxx 是接口的全路径,等于号后面就是服务的地址了。

诉求二解决方案

既然短时间内不太可能去改造部署系统,那么可以先简单的处理。目前他们就两个团队共用一套测试环境,我认为可以再新增一套环境来进行团队间的隔离。

对于入口处的 Web 程序或者网关,可以弄两个域名解决。主要是内部服务的调用需要进行隔离,比如我 A 团队部署的服务不能让 B 团队调用到,因为分支不一样会出问题。

注册隔离

注册隔离指的是在服务注册的时候就将两个团队的测试服务分别注册,比如各自使用一个独立的注册中心。

独立的注册中心肯定可以解决问题,但是完全没必要这么麻烦。他们注册中心用的 Nacos,可以使用 Nacos 的 namespace 来隔离即可。

-Ddubbo.registry.address=nacos://api.nacos.beta.xxx.com:8848?namespace=xxx

本地配置文件

同样也可以用本地配置文件的方式来指定调用的服务,这个方式的前提是部署的机器是独立的,不能共用。如果新增了新的接口需要修改配置文件。

控制 Dubbo 路由或者负载均衡

控制路由或者负载均衡都是为了实现同样的效果,也就是把所有的服务提供者信息给你,你自己选择一个去调用。

官方文档:

http://dubbo.apache.org/zh-cn/docs/dev/impls/router.html

http://dubbo.apache.org/zh-cn/docs/dev/impls/load-balance.html

总结

对于诉求一的解决方案,建议使用本地配置文件的方式。不需要改动代码,比较方便。

对于诉求二的解决方案,建议使用注册隔离的方式。这是最彻底的方式,用了注册隔离,也就不用在想办法去控制路由了,因为注册上来的服务就是我这套环境需要的,不需要的要注册信息在另一个命名空间里面,相互不影响。

关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。

Dubbo测试环境服务调用隔离这么玩对么的更多相关文章

  1. Dubbo消费方服务调用过程源码分析

    参考:dubbo消费方服务调用过程源码分析dubbo基于spring的构建分析Dubbo概述--调用过程dubbo 请求调用过程分析dubbo集群容错机制代码分析1dubbo集群容错策略的代码分析2d ...

  2. Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式

    写在前面 最近由于项目要求,原先的项目只有开发环境的项目配置,后来不利于线上测试,于是,最近对于SpringBoot这部分多环境配置在网上查找了相关资料,并实现了配置,于是为了防止遗忘,特在此进行总结 ...

  3. java使用netty模拟实现一个类dubbo的分布式服务调用框架

    本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能 ...

  4. 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作

    本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...

  5. 传统保险企业基于 Dubbo 的微服务实践

    本文整理自中国人寿保险(海外)股份有限公司深圳中心技术总监家黄晓彬在 Dubbo 社区开发者日深圳站的现场分享. 中国人寿保险(海外)股份有限公司负责香港.澳门.新加坡和印尼的业务开发,和国内业务不同 ...

  6. 基于.net的微服务架构的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

  7. swagger结合dubbo的rest服务测试

    swagger结合dubbo的rest服务测试 背景介绍 我们应用的dubbo服务导出,可能没有直接的触发点去发起调用测试,除非自己手写controller和test类,缺乏一个动态工具,类似流行的s ...

  8. 基于.net的微服务架构下的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

  9. dubbo集群服务下一台服务挂了对服务调用的影响

    一.问题描述:项目中2台dubbo服务给移动端提供查询接口,移动端反应说查询时而很快(秒刷),时而很慢(4-5秒). 二.问题分析: 1.问题猜想:网络不稳定原因导致,但是切换公司wifi和手机4G, ...

随机推荐

  1. Android学习笔记颜色资源文件

    资源文件目录 颜色资源文件格式 colors.xml <?xml version="1.0" encoding="utf-8"?> <reso ...

  2. Spring整合JDBC temple

    一.Spring对Jdbc的支持 Spring为了提供对Jdbc的支持,在Jdbc API的基础上封装了一套实现,以此建立一个 JDBC 存取框架. 作为 Spring JDBC 框架的核心, JDB ...

  3. ubuntu 显示桌面快捷键

    ubuntu 显示桌面快捷键 快速显示桌面的快捷键是 ctrl + win + d win:就是窗口键,在键盘左侧ctrl与Alt之间的那个建.

  4. 漏洞复现 MS11-003

    0x01漏洞简介 ms11-003(windows7IE溢出攻击) 是利用IE8中对css的解析存在一个问题,导致任何访问包含非法css的页面将导致IE8崩溃重启的漏洞. 0x02环境准备 攻击机:k ...

  5. mac安装powerdesigner

    安装Wine $brew install wine $wine --version 安装PowerDesigner cd PowerDesigner15.1 wine PowerDesigner15_ ...

  6. 【漏洞一】检测到目标URL存在http host头攻击漏洞

    [漏洞] 检测到目标URL存在http host头攻击漏洞 [原因] 在项目中使用了 request.getServerName 导致漏洞的出现 不要使用request中的serverName,也就是 ...

  7. robot framework使用小结(四)

    robot framework可以采用读excel表这种形式实现数据分离,本文没有实现批量读取excel表内容(还不会),后续有必要就学习哈再更新~~~ 新建测试案例baidu05, 右键项目名rob ...

  8. Docker入门(1):概述

    1.摘要 在这篇文章中,我将介绍一下为什么需要虚拟化的环境. 然后我将介绍耳熟能详的虚拟化技术:虚拟机,并大致的介绍一下虚拟机的原理,希望能够让你知道虚拟机的优劣. 在之后,针对虚拟机存在的问题,引出 ...

  9. CListCtrl 控件即使跟新数据,即时刷新以及属性设置

    用 m_CtrItem.Update( i );来即使跟新每行的数据,因为有时用某些函数如SetItemText()来设置某一行一列的数据是,控件上面的显示数据没有即使跟新,这是就有update来跟新 ...

  10. MysqlException: max pool size was reached.

    2019-09-09 08:22:08.620 +00:00 [ERR] Connection id "0HLPKVK52H2OU", Request id "0HLPK ...