Feign:意为伪装,假装
取这个名字源自于他使用的方式,作为远程调用,必须要有一个暴露出去的接口,供提供方实现,供消费方调用,所以一般我们会定义共用接口模块,这里举个一个例子:
@FeignClient(value = "provider-fun", fallback = FunFeignApiHystrix.class)
public interface FunFeignApi {
/**
*
* @return
*/
@SuppressWarnings("unused")
@PostMapping(value = "/api/fun/f1")
void f1()();
/**
*
* @return
*/
@SuppressWarnings("unused")
@PostMapping(value = "/api/fun/f2")
void f2();
}
这个接口就是给提供方和消费方共用的模块,他们都会引用,注意这里有使用@PostMapping注解,这个注解通常用在服务端,表示对外提供的资源访问路径,对于消费方来说,这个接口就好像服务端一样,实际却不是,因为Feign也会通过HTTP调用服务提供方的接口,所以,这个接口是Feign伪装出来的服务端供消费方调用,这种伪装使得服务消费方的调用变得方便和容易理解。这里定义的url我们自己没有显式使用,但是feign内部式使用了的,需要确定资源路径的,所以必须要定义。