zuul中FallbackProvider不生效的原因


客戶端訪問微服務,通過網關,如果服務掛掉了,自然也是需要熔斷的.否則體驗很不好.

package com.datang.pet.zuul.serverfallback;

import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

/*core服務降級*/
@Component
public class CoreFallback implements FallbackProvider {
    @Override
    public String getRoute() {
        return "core";
    }

    @Override
    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
        return new ClientHttpResponse() {
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.OK;
            }

            @Override
            public int getRawStatusCode() throws IOException {
                return HttpStatus.OK.value();
            }

            @Override
            public String getStatusText() throws IOException {
                return HttpStatus.OK.getReasonPhrase();
            }

            @Override
            public void close() {

            }

            @Override
            public InputStream getBody() throws IOException {
                String response = "{\n" +
                        "    \"msg\": \"core服務失去聯系,請聯系管理員\",\n" +
                        "    \"code\": 400,\n" +
                        "    \"data\": null\n" +
                        "}";
                ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(response.getBytes());
                return byteArrayInputStream;
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders httpHeaders = new HttpHeaders();
                httpHeaders.setContentType(MediaType.APPLICATION_JSON);
                return httpHeaders;
            }
        };
    }


}
View Code

但是只是這么寫,把服務關掉以后並沒有降級熔斷,客戶端收到的是404.

 

 找了好久才發現,原來是配置文件少配置了.

zuul.routes.core=/core/**

這個路由配置,原來以為只是一個服務名映射,但看來還是不簡單的.以上配置 .core是服務名,/core/** 指的是這個路徑下的都轉發到core服務

 


免責聲明!

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



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