java - 在微服务架构中,为什么他们说共享 REST Client 库不好?

标签 java spring microservices

<分区>

我们有 15 个服务是用 Java Spring 构建的,它们使用 REST 相互通信。

每次我们向池中添加新服务时,我们都会从头开始创建所有代码,包括将与其他服务对话的其余客户端代码以及用于映射所请求资源的 POJO 类。

我们最终从其他服务的源代码复制并粘贴到新服务中。

我认为将所有这些 POJO 和 rest 客户端代码放入一个库中以供所有服务使用它会更好,这会节省我们大量的编码工作,但是“他们”说我们不应该这样做微服务。

那么,这是为什么呢? 我们最终一遍又一遍地复制和粘贴完全相同的代码,我看不出有什么不同。

最佳答案

我会说“他们”是错的,而你是对的。复制和粘贴客户端代码有几个问题:

  • 如果您的客户端代码中存在错误,您将不得不修复 15 个位置的错误,而不仅仅是 1 个。
  • 它会减慢速度。您现在必须测试和维护同一代码的多个副本。
  • 通常的做法是创建客户端库并通过标准依赖项管理器(如 maven)分发它们。亚马逊这样做https://github.com/aws/aws-sdk-java以及几乎所有其他人。

总之,您是对的,亚马逊是支持您观点的最有力例证。他们完全按照您对其 Web 服务的建议行事,他们可以说是微服务领域最大最强大的参与者。

还要解决另一个答案中紧耦合的问题。好的 api 是向后兼容的,因此对 api 的更改不需要升级所有客户端,即使它们使用相同的客户端库也是如此。

关于java - 在微服务架构中,为什么他们说共享 REST Client 库不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50400384/

相关文章:

docker - 一个 Docker 容器如何找到另一个 Docker 容器的 IP 地址?

architecture - 当队列下降时怎么办?

microservices - 桌面应用程序可以有微服务架构吗?

java - 不同数组之间切换的算子,内部更精准

java - 将值从 JSP 发送到 servlet

java - 具有特定注释的参数的方法的 AspectJ 切入点

java - 如何在Spring Batch中为作业设置一些配置参数,以便它可以被步骤和子作业使用?

java - 小程序控制台日志

java - 为什么 'ServletContext#setRequestCharacterEncoding' 对 'HttpServletRequest#getReader' 没有影响?

java - 如何将 Multipart 参数中的对象列表绑定(bind)到 objectMapper?