关于doc文档中第一个远程调用的解耦问题

Blade 未结 1 78
six_six_2005
six_six_2005 剑圣 2025-06-30 15:36

一、该问题的重现步骤是什么?

bladex-doc 4.4 的3.5:第一个远程调用,其中3.5.1 声明式服务调用,第6部分:

@RestController

@AllArgsConstructor

public class BlogClientImpl implements BlogClient

此处有个解耦疑问:
微服务之间是通过 HTTP 协议进行通信的,而不是通过 Java 接口。这个类提供了接口的真正业务逻辑,但它不需要、也不应该实现 BlogClient接口,只需要这个方法的签名(路径、参数)必须与 Feign 接口中的定义匹配即可。

 BlogClient调用方(客户端)的约定,而 BlogClientImpl 是提供方(服务端)的实现。让服务端去实现一个客户端的接口会造成不必要的强耦合。


二、你期待的结果是什么?实际看到的又是什么?

 implements BlogClient 去掉,只由熔断机制的 BlogClientFallback 实现BlogClient接口。


@RestController

@AllArgsConstructor

public class BlogClientImpl

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

bladex 4.4

四、请提供详细的错误堆栈信息,这很重要。

示例中BlogClientFallback 和 BlogClientImpl 都实现了BlogClient, 当调用方使用 @Autowire时,会无法找到实现类,只能改用@Resource。

五、若有更多详细信息,请在下面提供。

1条回答
  • 2025-06-30 18:32

    首先这个不是服务端,其次实现这个接口也不会造成强耦合,反而实现类接口可以保证方法和参数的准确性。

    当然你觉得这样不合适,可以按照自己的习惯来开发,就是后续feign的实现类你得确保方法名、参数都和定义的接口保持一致。

    0 讨论(0)
代码语言
提交回复