spring cloud组件之ribbon+自定义IRule+fegin

本文介绍了如何在Spring Cloud中为Feign客户端自定义负载均衡策略。通过创建自定义的`IRule`实现类并配置到Ribbon中,实现了根据特定逻辑选择服务实例的功能。配置类通过`@RibbonClients`注解指定到Feign客户端,并确保配置类不被自动实例化。同时,探讨了通过配置文件设置Ribbon规则的方法。
摘要由CSDN通过智能技术生成

想要针对一个feign客户端执行不同的策略,想要自定义一些bean,不得法;
找到FeignClient的configuration,结果没有策略设置;
之前的方向一直在找feign的,后来发现应该是ribbon的:
spring cloud组件之ribbon+自定义IRule+fegin

feign定义

@FeignClient(value = "openav", path = "openav")
public interface FeignOpenAVService {

自定义IRule实现类

直接继承AbstractLoadBalancerRule实现自定义服务过滤

package ribbon;

public class OpenAVLoadBalancerRule extends AbstractLoadBalancerRule {
    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {

    }
	
	// 根据自己的逻辑选择服务实例
    public Server choose(ILoadBalancer lb, Object key) {
        // 参照相关Rule实现类,自己的实现
    }

    @Override
    public Server choose(Object key) {
        return choose(getLoadBalancer(), key);
    }

}

核心配置

代码方式

使用@RibbonClients @RibbonClient配置具体client的配置

package com.open;

@EnableFeignClients
@RibbonClients({
		@RibbonClient(name="openav",configuration = MyOpenAVRibbonConfiguration.class)
})
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })

配置类中自定义IRule,并通过包名确保不被spring扫描

package ribbon;

import com.netflix.loadbalancer.IRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyOpenAVRibbonConfiguration {
    @Bean
    public IRule myRule() {
        return new OpenAVLoadBalancerRule();
    }
}

注意所在包,应用启动application所在包是com.open,配置类所在包是ribbon,所以:自定义配置类用@Configuration做了标识,但又不会被实例化(如果实例化,默认IRule不再初始化而是使用这里的定义了),当然也可以使用exclude排除不扫描和实例化这个类。


使用配置文件

ribbon的全局配置

# 使用配置文件方式指定ribbon规则,目前尚未找到通过编码方式直接配置Ribbon

ribbon:
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

针对具体服务的配置:

# 使用配置文件方式指定ribbon规则,目前尚未找到通过编码方式直接配置Ribbon
openav:
  ribbon:
    NFLoadBalancerRuleClassName: ribbon.OpenAVLoadBalancerRule

格式:<clientName>.ribbon.<item>

相关文章和参考

  1. feign的初始化见:【源码】Spring Cloud —— OpenFeign 1 FeignClientsRegistrar FeignClientSpecification 等
  2. feign访问: 【源码】Spring Cloud —— OpenFeign 2 FeignClientFactoryBean 等
  3. 关于feign的自定义配置:FeignClient里如何进行重试(Retry)和超时(timeout)配置
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值