berg369 2020-04-26 09:48 采纳率: 85.7%
浏览 1216
已采纳

微服务间调用能否自动判断本地调用还是远程调用从而采取不同方式?

想实现的功能:

微服务间调用主要有springcloud和Dubbo两种,有时,小型项目或者服务器条件限制,多个服务组件可能打包为一个单体项目,或者打包为少数微服务,也可能所有服务组件单独打包为很多服务,例如开发了30个微服务工程,打包时可根据部署条件,打包到1个单体项目应用、3个应用(每个包含若干微服务)、30个应用(每个应用只包含一个微服务)这三种形式。那么服务间调用时,springcloud或dubbo能否动态的判断,如果是本地就直接依赖了避免网络请求及两次序列化转换性能更好,如果是远程再走远程调用机制,程序代码不动,能实现吗?

1、有意义吗?

这种做法追求本地调用和远程调用统一代码,意味着只能统一用java语言,而不支持其它(RestApi方式可支持所有语言,但写法明显不是java调用方式),但影响不大,这些微服务工程基于高内聚低耦合原则,之间调用并不多,但既然是写死在程序中,毕竟也是耦合的,可以建立自己的规则,不支持其它语言或第三方也没有关系。网上找不到这种作法的资料,这种做法有意义吗?

2、如何实现?

我的理解,springcloud基本是http请求,写法上与本地调用不同,实现上述要求有些困难,Dubbo写法上与本地请求一样,是否可以实现?怎么实现呢?

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-04-26 10:26
    关注

    可以把调用的部分抽象出来,也就是远程调用的stub代码和本地调用的proxy代码,使用相同的接口。
    这样可以保证上层调用的透明,不需要修改调用的代码,而把性能的优化放在底层。类似三层架构里面把 IDAO 接口和具体的数据库访问代码分离。

    在服务本身的设计上,应该统一,也就是说不要为不同调用路径编写不同代码,这样方便维护,也减少了单元测试的工作量。同时避免服务之间的耦合。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 nslt的可用模型,或者其他可以进行推理的现有模型
  • ¥15 arduino上连sim900a实现连接mqtt服务器
  • ¥15 vncviewer7.0安装后如何正确注册License许可证,激活使用
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并2
  • ¥66 关于人体营养与饮食规划的线性规划模型
  • ¥15 基于深度学习的快递面单识别系统
  • ¥15 Multisim仿真设计地铁到站提醒电路
  • ¥15 怎么用一个500W电源给5台60W的电脑供电
  • ¥15 请推荐一个轻量级规则引擎,配合流程引擎使用,规则引擎负责判断出符合规则的流程引擎模板id
  • ¥15 Excel表只有年月怎么计算年龄