客户端负载均衡Feign之四:Feign配置

Ribbon配置

在Feign中配置Ribbon非常简单,直接在application.properties中配置即可,如:

# 设置连接超时时间
ribbon.ConnectTimeout=500
# 设置读取超时时间
ribbon.ReadTimeout=5000
# 对所有操作请求都进行重试
ribbon.OkToRetryOnAllOperations=true
# 切换实例的重试次数
ribbon.MaxAutoRetriesNextServer=2
# 对当前实例的重试次数
ribbon.MaxAutoRetries=1

同样也可以指定服务配置,直接在application.properties中采用.ribbon.key=value的格式进行配置,如下:

# 设置针对user-service服务的连接超时时间
user-service.ribbon.ConnectTimeout=600
# 设置针对user-service服务的读取超时时间
user-service.ribbon.ReadTimeout=6000
# 设置针对user-service服务所有操作请求都进行重试
user-service.ribbon.OkToRetryOnAllOperations=true
# 设置针对user-service服务切换实例的重试次数
user-service.ribbon.MaxAutoRetriesNextServer=2
# 设置针对user-service服务的当前实例的重试次数
user-service.ribbon.MaxAutoRetries=1

 

在SpringCloudFeign中是默认打开重试机制,从上面的配置信息也可以看出,我们可以设置重试的次数。对于重试机制的测试,可以让服务提供方的方法延迟随机毫秒数来测试。

Hystrix配置

对于Hystrix的配置同样可以在application.properties中配置,全局配置直接使用默认前缀hystrix.command.default,如

# 设置熔断超时时间
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
# 关闭Hystrix功能(不要和上面的配置一起使用)
feign.hystrix.enabled=false
# 关闭熔断功能
hystrix.command.default.execution.timeout.enabled=false

 

也可以直接对指定的接口进行配置,采用hystrix.command.default.<commandKey>作为前缀,比如如/findAllUser

# 设置熔断超时时间
hystrix.command.findAllUser.execution.isolation.thread.timeoutInMilliseconds=10000
# 关闭熔断功能
hystrix.command.findAllUser.execution.timeout.enabled=false

 

对于重复的接口名会共用这一条Hystrix配置;

禁用Hystrix

上面的配置信息中,可以通过配置文件全局禁用Hystrix也可以指定接口禁用。我们也可以注解属性的方式禁用Hystrix; 
- 构建一个关闭Hystrix的配置类

@Configuration
public class DisableHystrixConfiguration {

    @Bean
    @Scope("prototype")
    public Feign.Builder feignBuilder(){
        return Feign.builder();
    }
}

 

  • @FeignClient注解中,通过configuration参数引入上面实现的配置
@FeignClient(value = "USER-SERVICE",configuration = DisableHystrixConfiguration.class)
public interface UserRafactorService extends UserService {
}

 

服务降级配置

在Hystrix中我们可以直接通过@HystrixCommand注解的fallback参数进行配置降级处理方法,然而Feign对其进行封装,并提供了一种简单的定义方式: 
1. 在之前的feign-consumer服务中创建一个UserServiceFallback类,该类实现UserService接口。这里对于哪个类接口的降级就实现哪个接口,

@Component
public class UserServiceFallback implements UserService {
    @Override
    public List<User> findAll() {
        return null;
    }

    @Override
    public User finUserById(Long id) {
        return new User(-1L,"error",0);
    }

    @Override
    public User findUserHeader(String name, Long id, Integer age) {
        return new User(-1L,"error",0);
    }

    @Override
    public User insertUser(User user) {
        return new User(-1L,"error",0);
    }
}

 

  1. 然后再@FeignClient注解中指定服务降级处理类即可:
@FeignClient(value = "USER-SERVICE",fallback = UserServiceFallback.class)
  1. 在配置文件中开启Hystrix:
feign:
  hystrix:
    enabled: true

然后在USER-SERVICE服务中将某个接口设置延迟测试: 

请求压缩

Spring Cloud Feign支持对请求和响应进行GZIP压缩,以提高通信效率,配置方式如下:

# 配置请求GZIP压缩
feign.compression.request.enabled=true
# 配置响应GZIP压缩
feign.compression.response.enabled=true
# 配置压缩支持的MIME TYPE
feign.compression.request.mime-types=text/xml,application/xml,application/json
# 配置压缩数据大小的下限
feign.compression.request.min-request-size=2048

 

日志配置

SpringCloudFeign为每一个FeignClient都提供了一个feign.Logger实例。可以根据logging.level.<FeignClient>参数配置格式来开启Feign客户端的DEBUG日志,其中<FeignClient>为Feign客户端定义接口的完整路径。如:

logging:
  level: 
    com.wqh.feign.service.UserService: debug

 

然后再主类中直接加入Looger.Level的Bean

@Bean
public Logger.Level feignLoggerLevel(){
    return  Logger.Level.FULL;
}

 

这里也可以通过配置,然后在具体的Feign客户端来指定配置类实现日志。 
日志级别有下面4类: 
- NONE:不记录任何信息; 
- BASIC:仅记录请求方法、URL以及响应状态码和执行时间; 
- HEADERS:除了记录BASIC级别的信息外,还记录请求和响应的头信息; 
- FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Feign是一个用于服务间通信的轻量级Java HTTP客户。它可以与Eureka和Ribbon组合使用以支持负载均衡。要配置Feign进行负载均衡,可以按照以下步骤操作: 1. 添加依赖:在项目的pom.xml文件中添加Feign的依赖,如下所示: ``` <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> ``` 2. 启用Feign:在Spring Boot应用程序的启动类上添加`@EnableFeignClients`注解,以启用Feign的功能。例如: ``` @SpringBootApplication @EnableFeignClients public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 3. 创建Feign客户接口:在需要调用其他服务的地方创建一个Feign客户接口,并使用`@FeignClient`注解指定要调用的服务的名称。例如: ``` @FeignClient(name = "your-service") public interface YourServiceClient { // 定义需要调用的服务接口方法 } ``` 4. 使用Feign客户:在需要调用服务的地方注入Feign客户,并使用与调用本地方法类似的方式进行调用。例如: ``` @RestController public class YourController { private final YourServiceClient yourServiceClient; public YourController(YourServiceClient yourServiceClient) { this.yourServiceClient = yourServiceClient; } @GetMapping("/your-endpoint") public String yourEndpoint() { return yourServiceClient.yourMethod(); } } ``` 以上就是配置Feign进行负载均衡的基本步骤。通过使用Feign和Eureka/Ribbon的组合,您可以实现服务间的负载均衡和动态服务发现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值