在Feign的Service添加了FeignCLient(name = "XXX-SERVICE"),定义好了接口之后,Feign是通过什么方式找到服务提供者的接口的?是通过RequestMapping中的value吗?
在Feign的Service添加了FeignCLient(name = "XXX-SERVICE"),定义好了接口之后,Feign是通过什么方式找到服务提供者的接口的?是通过RequestMapping中的value吗?
我个人的理解是FeignClient中的接口名称的定义与服务提供者中的controller中的接口名称一致,就实现了Feign接口与被调用服务的接口的捆绑。
不知道这样的理解对不对?
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
如果题主的『如何』指的是如何使用 Feign 通过声明式的注解,提供一个供其它服务调用的 Client。
这里先举个例子说明:
在一个 Spring Cloud 项目中,你通过如下代码声明一个服务:
1. 配置文件
bootstrap.yml
:2. Endpoint 定义文件
MockController
:3. Feign Client 定义文件
MockClient.java
:由 1、2、3 得出结论,Feign 提供的是对 特定服务 > 特定接口 的声明式定义。换言之,也就是先找到服务,然后寻找服务里的接口。
如果题主中的『如何』指的是:上述调用方如何找到
mock-service
服务。在 Spring Cloud Netflix 中,Eureka Server (注册中心)负责服务注册与发现,同一个注册中心中的服务可以通过 Feign 进行声明式调用。其原理是通过注解,把请求模板化。当请求参数传进来的时候,会把参数填充到模板中去,然后调用类似于下面伪代码:可以看成是一个远程方法调用,其中 HttpEncoder 和 HttpDecoder 等其它细节,不详细展开。