细粒度与全局 的在spring-cloud里配置Ribbon ,与自定义Ribbon 配置项

在这里插入图片描述

细粒度

配置一个 基于JAVA代码的 随机策略的 Ribbon

一、创建目录及类

注意 RibbonConfiguration 不能被启动类的@ComponentScan 注解扫描到。
@ComponentScan 扫描的是当前类的文件夹以及子文件夹的@Component,如果RibbonConfiguration的@Component 在ComponentScan 扫描范围内就会出现 父子上下文错乱的问题,会导致此Ribbon的配置会被共享,成为一个全局的负载均衡配置,影响的范围也是当前服务的所有调用策略,而不是细粒度的配置策略。所以RibbonConfiguration的目录 在启动类的同级目录。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

import org.springframework.cloud.netflix.ribbon.RibbonClient;
import ribbonconfiguration.RibbonConfiguration;

@RibbonClient(name = "user-center" ,configuration = RibbonConfiguration.class)
//name表明这个Ribbon是给user-center用的,configuration指定一个类
public class UserCenterRibbonConfiguration {
}



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

@Configuration
public class RibbonConfiguration {
    @Bean
    public IRule ribbonRule(){

        return new RandomRule();//选一个IRule 的实现类
    }
}

二、使用

1.启动类

@MapperScan("com.itmuch")
@SpringBootApplication
public class ContentCenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(ContentCenterApplication.class, args);
    }
    @Bean
    @LoadBalanced //加Ribbon注解
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

  1. 业务逻辑类
private final RestTemplate restTemplate;

    public ShareDTO findById(Integer id) {
        // 获取分享详情
        Share share = this.shareMapper.selectByPrimaryKey(id);
        //share里没有用户的信息,所以要调用user服务来获取
        Integer userId = share.getUserId();


        //"http://user-center/users/{userId}" Ribbon 会将 "user-center" 转化为 user-center 在Nacos上的地址,并实现负载均衡
        UserDTO userDTO = restTemplate.getForObject("http://user-center/users/{userId}",UserDTO.class,userId);
        ShareDTO shareDTO = new ShareDTO();
        BeanUtils.copyProperties(share,userDTO);
        shareDTO.setWxNickname(userDTO.getWxNickname());
        return shareDTO;
    }

配置一个 基于yml 配置的 随机策略的 Ribbon

一. 添加yml配置

改yml文件:
NFLoadBalancerRuleClassName 后面写上RandomRule的全名

user-center:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

二.使用

启动类,业务逻辑类同 上面的 ”基于JAVA代码“

全局

把细粒度的UserCenterRibbonConfiguration 修改一下

@RibbonClient(name = "user-center" ,configuration = RibbonConfiguration.class)
//name表明这个Ribbon是给user-center用的,configuration指定一个类
public class UserCenterRibbonConfiguration {
}

@RibbonClient----->@RibbonClients

configuration ---->defaultConfiguration

@RibbonClients(defaultConfiguration = RibbonConfiguration.class)
public class UserCenterRibbonConfiguration {
}

自定义Ribbon 配置项

接口列都可以进行自定义配置,
在这里插入图片描述
如果想配置负载均衡:
采用JAVA代码的方式可以仿照:配置一个 基于JAVA代码的 随机策略的 Ribbon 的 一。
采用yml配置的方式可以仿照:配置一个 基于yml 配置的 随机策略的 Ribbon 的 一。 注意冒号后面写全名,可以用control+shift+r 搜 IRule 、IPing 等 去粘贴全名。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值