gateway調用Fegin失敗問題解決


起因

新項目用的是springcloud2.0,網關用gateway替換了zuul。

gateway動態路由跟zuul有本質上的區別。這就涉及到webflux這一套大東東了。簡單來說,gateway是spring5.0b出來的,最新基於webflux,默認使用netty為底層容器的一套響應式,非阻塞的異步框架,這跟之前的zuul的同步阻塞,基於tomcat的框架是完全不同的,具體到細節,光編碼就是完全不一樣,是另一種的風格基於jdk8的Lambda和流那一套東東,還涉及到Flux 和 Mono。

這篇文章主要不是來講webflux的,這邊也只是簡單講一下。

原因是gateway這一塊用fegin進行微服務之間的相互調用,發現是失敗的。

問題解決

網上百度一波,基本上都說修改feign的配置文件,注入Decode。結果發現不行,僅僅修改decode是完全不夠的,還要修改encode。
具體如下:

/**
 * 手動調整feignConfig,以支持webflux下feign調用
 *
 * @auther: jrhua
 * @date: 2020/7/17 14:17
 */
@Configuration
public class FeignConfig {
    @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());
        };
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM