当前位置: 首页 > 网络应用技术

分享一个埋在Springcloud假装中的坑

时间:2023-03-05 16:35:17 网络应用技术

  一段时间以前,我的同事遇到了一个问题,该问题需要在假装呼叫中使用自定义URL;通常没有这种需求;毕竟,使用它。需要自定义定制URL的情况。

  但是有特殊的。例如,当我们遇到场景时,我们需要致电每个商人。

  尽管可以使用本机甚至定制的实现,但必须通过写作方式代替这些解决方案。

  它旨在使用现有的实现。毕竟,本机假装实际上支持该功能,并且仅在此基础上包装。

  您只需要在接口语句中添加一个参数,以便您可以在每个呼叫中传递不同的动态目的。

  这个想法很简单,但事实并非如此。伪代码如下:

  执行后,将引发负载平衡的异常:

  这个例外也可以理解,也就是说,我找不到github服务。毕竟,找不到它不是内部注册服务是合理的。

  但是,根据官方介绍,只要在接口中声明接口,就可以自定义。同时,我还使用本地假装对其进行测试。这确实没有问题。

  问题只能放在包装上;同事搜索解决此问题后,在网上发现了一个博客。

  https://www.cnblogs.com/sei-tera/p/14386188.html

  根据文章的确,URL参数同时值得,但原因是未知的。

  基于打破砂锅的精神要求结束,我个人想知道如何处理它。只要URL值得,这就是一个黑匣子,并且在官方注释中没有对这种情况的特殊解释。

  因此,我将从源代码中找到答案。

  由于URL值可以正常运行,因此必须在操作过程中获得。

  但是,我没有找到源代码中使用的URL的应用程序,也没有在单个测试之外找到任何应用程序,这表明该函数未直接调用源代码中的函数以获取值。

  但是该注释将始终使用,因此我再次检查此注释的使用。

  最终在这里找到了使用痕迹。

  在此处检查源代码时,还有一些提示。例如,如果我们直接查询,则默认查询范围的想法是整个项目和所有依赖库,并且会有许多干扰信息。

  例如,我只需要查看项目的源代码,因此我不需要单独阅读这些内容。因此,您可以在查询时过滤它,以使干扰信息要少得多。

  左侧工具栏上有许多过滤条件,您可以自己学习。

  从源代码中阅读后,您会发现中间的所有数据都一对一使用。最后,您会发现此URL写入中间的URL成员变量中。

  查看您在哪里使用此URL了解背后的原理。

  这是一个断点,发现当URL为空时,它将返回一个从注册中心获得的客户端,并且在有价值的情况下将获得默认客户端,以便负载平衡。不会被带到负载平衡的右边。

  因此,如果我们想在OpenFeign中使用动态URL,无论它是什么,我们都必须使@Feign值的URL有价值。

  现在我已经看到了这一点,我也很好奇假装如何使用指定的URL,只要有URI参数?

  在这里,我们还分享了阅读源代码的提示。如果我们遵循该程序的想法,那将是非常耗时的。毕竟,这种成熟库的代码并不小。

  在这里,我们可以从官方文档中知道,只要您在接口参数中使用它,您就会遵循自定义URL,因此,只要我们在源代码中找到它,我们就可以知道关键源代码。

  毕竟,没有使用太多场景。

  因此,结果只有在这个地方的全局搜索中才能找到取决于整体搜索的地方。实际上没有很多,只使用了两个。

  结合使用方案,猜测很高的可能性是确定参数中是否存在这种条件,还是URL对象;简而言之,我们首先在这两个文件中搜索了这样的关键字,请记住检查对接。它是确定参数中是否有此类,并记录此索引的位置。

  据推测,最终信息将通过此索引位置阅读。

  最终,通过使用此索引来查询核心源代码。如果您有价值,请以URI中指定为URI的地址。

  该问题背后的原则已经进行了分析。

  实际上,本文的重点是分析和阅读源代码的一些技巧,尤其是在阅读相关代码时不得在详细信息中跟踪,因为通话链通常很长,而且您会头晕目眩,而不会注意它。您只需要知道如何处理核心和关键源代码即可。

  最后,解决开放式处理动态URL的解决方案确实是一个典型的场景,但问题是我们不知道该协议的URL值得。

  因此,我还提到了一个感兴趣的朋友也可以检查:

  https://github.com/spring-cloud/spring-cloud-pull/713

  原始:https://juejin.cn/post/7100863261142155294