1. 程式人生 > >Spring Cloud Feign Hystrix 配置

Spring Cloud Feign Hystrix 配置

Hystrix配置

在Spring Cloud Feign中,除了引入了使用者客戶端負載均衡的Spring Cloud Ribbon之外,還
引入了Hystrix,Spring Cloud Feign會為所有的Feign客戶端的方法都封裝到Hystrix命令中進行服務保護。

全域性配置

直接使用預設配置字首hystrix.commmand.default就可以進行配置。
但是在配置之前一定要確認feign.hystrix.enabled引數是否被設定為了false,如果設定為了false.否則該引數設定會關閉Feign客戶端的Hystrix支援。

禁用Hystrix

1.全域性設定
		通過feign.hystrix.enabled=false.
2. 如果只是想針對某個服務客戶端,需要使用@Scope("prototype")註解為指定的客戶端配置Feign.Builder例項。
package com.bobo.configuration;

import feign.Feign;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;

/**
 * @author [email protected]
 * @create 2018-10-28 16:22
 **/
@Configurable
public class DisableHystrixConfiguration { @Bean @Scope("prototype") public Feign.Builder builder() { return Feign.builder(); } }
然後在service中使用
package com.bobo.service;

import com.bobo.configuration.DisableHystrixConfiguration;
import org.springframework.cloud.netflix.
feign.FeignClient; /** * @author [email protected] * @create 2018-10-28 10:17 **/ @FeignClient(value = "eureka-client",configuration = {DisableHystrixConfiguration.class}) public interface RefactorHelloService extends com.bobo.service.api.HelloService { }

指定命令配置

就是為方法指定Hystrix ,使用hystrix.command.<commandKey>作為字首,commandkey就是方法名。

服務降級配置

其實這個就是更加簡單了,就是使用一個類實現介面類,然後加上註解就可以了。
package com.bobo.fallback;

import com.bobo.bean.User;

/**
 * @author [email protected]
 * @create 2018-10-28 16:32
 **/
public class RefactorHelloServiceFallback implements com.bobo.service.api.HelloService {
    @Override
    public String Hello(String name) {
        return "bobo";
    }

    @Override
    public User Hello(String name, String age) {
        return new User("未知",0);
    }

    @Override
    public String Hello(User user) {
        return "hello"+"wuxiaobo"+", "+"bobo";
    }
}

指定降級類
package com.bobo.service;

import com.bobo.configuration.DisableHystrixConfiguration;
import com.bobo.fallback.RefactorHelloServiceFallback;
import org.springframework.cloud.netflix.feign.FeignClient;

/**
 * @author [email protected]
 * @create 2018-10-28 10:17
 **/


@FeignClient(value = "eureka-client",
            fallback = RefactorHelloServiceFallback.class)
public interface RefactorHelloService extends com.bobo.service.api.HelloService {
}

其他配置

請求壓縮
#開啟請求和相應的壓縮功能
feign.compression.request.enabled=true
feign.compression.response.enabled=true
#壓縮的請求型別
feign.compression.request.mime-types=text/xml,application/xml,application/json
#壓縮的請求下限
feign.compression.request.min-request-size=2048