使用Feign进行远程调用注意事项
提供者
Controller,暴露对外接口,并注册到注册中心。
消费者
- 使用@FeignClien注解到接口启用远程调用, @FeignClien(注册中心服务名字,[指定域名和端口])。
- 使用@GetMapping(“子路径”)指定调用的服务的路径,并和方法绑定,注入接口后调用这个方法就会创建动态代理进行远程调用。
注意事项
- @FeignCilent默认为参数加上@RequestBody, @PostMapping只支持一个参数,多了无法启动项目。
- 由于参数和返回结果的实体模型通常是有服务提供者确认的,消费者并不确定,所以通常把实体类和FeignClient接口都放在一个模块里面供消费者用maven引入后使用。而在业务模块实现这些FeignClient接口,因为注解不能继承,还要加上@GetMapper注解和@Controller注解才行(因为@Feign接口也会动态代理生成一个实例,所以会有两个@Feign接口接口实例,这是弊端)。我之前想把@feign定义的接口都放在comment模块里面,现在觉得还是要分治好,各自模块负责各自的接口定义
- feign文件上传,要使用@RequestPart 注解,并且设置提交模式为consumes = MediaType.MULTIPART_FORM_DATA_VALUE
- feign经常出现fallback没有找到的情况,很多情况是maven依赖install到本地仓库造成的,在开发中不要 install到本地仓库,应该使用源码依赖直接编译;先关掉所有服务;提供方先删掉target里面的的内容,在maven reload一下 feign;消费方也执行一样的流程(先启动比较好)