首先,我对这里发挥作用的原则和最佳实践感兴趣。 Spring Cloud Netflix Core
和Feign
只是示例。在标题中,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
中它被列为可选依赖项:
这意味着我可以依赖于Spring Cloud Netflix Core
,但是如果不提供对io.github.openfeign:feign-core
的依赖就无法捕获可能引发的异常。这是一个我试图捕获可能的FeignException
且intellij抱怨的地方的示例,因为它不知道FeignException
是什么(因为我没有声明feign-core
依赖性) :
由于FeignClient
可能会引发此类错误,因此使用方的代码需要了解该错误。 为什么Spring Cloud Netflix Core
不能通过使FeignException
成为必需的依赖关系而使feign-core
暴露于使用代码中?
我的猜测是,开发人员刚刚在这里打电话。允许使用方的代码提供不同的Decoder
,它可能不会抛出FeignException
。包含默认SpringDecoder
以及决定抛出FeignException
的决定是一种便利,而不是库的核心部分。他们本来可以要求这样做的,但随后,消费者可能会为他们可能永远不需要的额外膨胀感到沮丧。
解决方案很简单:依靠feign-core
。我对周围的原则和最佳做法感到好奇。