栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

feign定义

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

核心配置

package com.open;

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

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

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();
    }
}

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

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

    }
	
	// 根据自己的逻辑选择服务实例
    public Server choose(ILoadBalancer lb, Object key) {
        
    }

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

}

相关文章和参考
1、feign的初始化见:【源码】Spring Cloud —— OpenFeign 1 FeignClientsRegistrar FeignClientSpecification 等
2、feign访问: 【源码】Spring Cloud —— OpenFeign 2 FeignClientFactoryBean 等
3、关于feign的自定义配置:FeignClient里如何进行重试(Retry)和超时(timeout)配置

Class[] configuration() default {};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351997.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号