Dubbo测试环境服务调用隔离这么玩对么

尹吉欢 2020-11-06 01:32:24
dubbo 测试 环境 服务 调用


背景阐述

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

诉求一

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

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

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

配置如下:

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

诉求二

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

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

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

解决方案

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

诉求一解决方案

@Reference

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

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

图片

本地配置文件

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

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

dubbo-resolve.properties

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

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

诉求二解决方案

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

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

注册隔离

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

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

  1. -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 微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。

我整理了一份很全的学习资料,感兴趣的可以微信搜索 「猿天地」,回复关键字 「学习资料」获取我整理好了的Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC分库分表,任务调度框架XXL-JOB,MongoDB,爬虫等相关资料。

版权声明
本文为[尹吉欢]所创,转载请带上原文链接,感谢
http://cxytiandi.com/blog/detail/36492

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云