依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.3</version>
</dependency>
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-hc5</artifactId><version>13.1</version>
</dependency>
配置文件
server:port: 8081spring:application:name: ms1cloud:nacos:discovery:server-addr: localhost:8848feign:client:config:default:connectTimeout: 5000readTimeout: 5000httpclient:hc5:enabled: truecompression:request:enabled: truemin-request-size: 2048mime-types: text/xml,application/xml,application/jsonresponse:enabled: truelogging:level:com.jrb.ms1.feign: debug
启动类
@EnableFeignClients(basePackages = "com.jrb.ms1.feign")
配置类
RequestInterceptor拦截器
@Component
public class MyFeignRequestInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate template) {System.out.println("每次feign调用,都会经过该拦截器");template.header("x-token", UUID.randomUUID().toString());}
}
FeignConfig
@Configuration
public class FeignConfig {@Beanpublic Retryer retryer() {return new Retryer.Default(100, 1, 3);}@Beanpublic Logger.Level feignLoggerLevel() {return Logger.Level.FULL;}
}
ms2Feign
@FeignClient("ms2")
public interface ms2Feign {@PostMapping("/aa")String aa();@PostMapping("/bb")String bb(@RequestParam("name") String name, @RequestParam("age") int age);@PostMapping("/cc/{name}/{age}")String cc(@PathVariable("name") String name, @PathVariable("age") int age);@PostMapping("/dd")String dd(@RequestBody FeignEntity feignEntity);@PostMapping("/ee")String ee(@RequestBody Map<String, Object> reqMap);@PostMapping("/ff")String ff(@RequestHeader("Authorization") String auth, @RequestBody Map<String, Object> reqMap);}
请求方controller
@RestController
public class OpenFeignDemoController1 {@Resourceprivate ms2Feign ms2;@GetMapping("/a")public String a() {try {return ms2.aa();} catch (Exception e) {e.printStackTrace();return "111";}}@GetMapping("/b")public String b() {return ms2.bb("张三", 18);}@GetMapping("/c")public String c() {return ms2.cc("张三", 18);}@GetMapping("/d")public String d() {return ms2.dd(new FeignEntity("张三", 18));}@GetMapping("/e")public String e() {Map<String, Object> reqMap = new HashMap<>();reqMap.put("name", "张三");reqMap.put("age", 18);return ms2.ee(reqMap);}@GetMapping("/f")public String f() {Map<String, Object> reqMap = new HashMap<>();reqMap.put("name", "张三");reqMap.put("age", 18);return ms2.ff("abcdefg", reqMap);}
}
服务方controller
@RestController
public class OpenFeignDemocontroller2 {@PostMapping("/aa")public String aa() {return "aa=>";}@PostMapping("/bb")public String bb(String name, int age) {return "bb=>" + name + age;}@PostMapping("/cc/{name}/{age}")public String cc(@PathVariable("name") String name, @PathVariable("age") int age) {return "cc=>" + name + age;}@PostMapping("/dd")String dd(@RequestBody FeignEntity feignEntity) {return "dd=>" + feignEntity;}@PostMapping("/ee")String ee(@RequestBody Map<String, Object> reqMap) {return "ee=>" + reqMap;}@PostMapping("/ff")String ff(@RequestBody Map<String, Object> reqMap, HttpServletRequest request) {String authorization = request.getHeader("Authorization");String token = request.getHeader("x-token");return "ee=>" + reqMap + authorization + "token:" + token;}
}