如果库X引发了Y的异常,为什么它没有对库Y的必需依赖关系?

时间:2019-08-23 17:08:14

标签: dependency-management spring-cloud-feign feign

首先,我对这里发挥作用的原则和最佳实践感兴趣。 Spring Cloud Netflix CoreFeign只是示例。在标题中,Spring Cloud Netflix Core = X和feign-core = Y。

我正在开发一种微服务,它将使用Feign与其他服务进行通信。为了生成FeignClient来支持这种通信,该项目使用了@FeignClient项目(Spring Cloud Netflix Core)提供的org.springframework.cloud:spring-cloud-netflix-core注释。

我生成的FeignClient(从技术上来说,默认为SpringDecoder)可能会生成错误并抛出FeignException。但是,此工件没有提供FeignException:在pom.xml中它被列为可选依赖项: dependency on openfeign is optional

这意味着我可以依赖于Spring Cloud Netflix Core,但是如果不提供对io.github.openfeign:feign-core的依赖就无法捕获可能引发的异常。这是一个我试图捕获可能的FeignException且intellij抱怨的地方的示例,因为它不知道FeignException是什么(因为我没有声明feign-core依赖性) : enter image description here

由于FeignClient可能会引发此类错误,因此使用方的代码需要了解该错误。 为什么Spring Cloud Netflix Core不能通过使FeignException成为必需的依赖关系而使feign-core暴露于使用代码中?

我的猜测是,开发人员刚刚在这里打电话。允许使用方的代码提供不同的Decoder,它可能不会抛出FeignException。包含默认SpringDecoder以及决定抛出FeignException的决定是一种便利,而不是库的核心部分。他们本来可以要求这样做的,但随后,消费者可能会为他们可能永远不需要的额外膨胀感到沮丧。

解决方案很简单:依靠feign-core。我对周围的原则和最佳做法感到好奇。

0 个答案:

没有答案