gateway在写全局filter的时候,继承GlobalFilter,调用feign接口报错。原因是在gateway项目创建的时候,不会创建HttpMessageConverters实例。所以需要建立一个手动放入bean容器里
@Configuration public class FeignConfig { /** * 默认connect timeout 10s,read timeout 60s * @return */ @Bean public Request.Options feignOptions(){ return new Request.Options(); } @Bean public Encoder feignEncoder() { return new SpringEncoder(feignHttpMessageConverter()); } @Bean public Decoder feignDecoder() { return new OptionalDecoder( new ResponseEntityDecoder(new SpringDecoder(feignHttpMessageConverter()))); } public ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() { return () -> { return new HttpMessageConverters(new MappingJackson2HttpMessageConverter()); }; } }
这样程序会启动成功。
因为gateway在filter过滤的时候,回大量运用异步,所以你正常调用会出现问题,回报错
所以你要异步运行调用feign。
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(()->{ return Login.login(); });
这样就可以了。