OpenFeign
-
@FeignClient标签的常用属性如下:
name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
url: url一般用于调试,可以手动指定@FeignClient调用的地址
decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
path: 定义当前FeignClient的统一前缀 -
关于调用目前有两种:
(1)接口提供方在注册中心。
如果服务提供方已经注册到注册中心了,那么name或者value的值为:服务提供方的服务名称。必须为所有客户端指定一个name或者value
@FeignClient(value="run-product",fallback = ProductClientServiceFallBack.class)
(2)单独的一个http接口,接口提供方没有注册到注册中心。
@FeignClient(name="upload-service")
此处name的值为:调用客户端的名称。
调用流程
前两个接口在同一个模块中(feign-service)
在 feign-service 模块中:启动类需要加注解 @EnableFeignClients
服务A 是用于给服务B 调用的,然后,服务B 再调用服务C
创建远程调用接口 ---- 服务A
UploadService接口 :
在 upload-service 模块中,已经在 bootstrap.xml 中配置好 spring.application.name
@FeignClient(name = “upload-service”):此处的name就是去寻找name是upload-service的服务
@FeignClient(name = "upload-service")
public interface UploadService {
/**
* 调用远程服务的文件上传接口
* 1、PostMapping必须提供consumes属性, 值必须是multipart/form-data
* 2、方法参数MultipartFile前增加注解 @RequestPart
*/
@RequestMapping(value = "/upload/img",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
ResultVO<String> upload(@RequestPart MultipartFile pic)throws IOException;
}
开发图片上传接口 ---- 服务B
UploadController类:调用服务A ----> UploadService
@RestController
@RequestMapping("/upload")
public class UploadController<