您当前的位置: 首页 >  ribbon

Charge8

暂无认证

  • 10浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Nacos使用Ribbon

Charge8 发布时间:2022-10-05 14:10:36 ,浏览量:10

Spring Cloud Ribbon是基于 Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,比如超时,重试等。通过 Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机等)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法。关于Ribbon负载均衡的介绍查看之前的文章:

Ribbon负载均衡和RestTemplate使用:https://blog.csdn.net/qq_42402854/article/details/111088360

一、Nacos使用Ribbon 1、引入依赖

由于 nacos-discovery依赖了 Ribbon,所以我们不需要再引入 Ribbon依赖。

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        




在这里插入图片描述

2、开启负载均衡

开启 @LoadBalanced 与 Ribbon 的集成。

RestTemplate 添加 @LoadBalanced注解,让RestTemplate在请求时拥有客户端负载均衡的能力。使用 RestTemplate进行服务调用。

@Configuration
public class RestTemplateConfig {
    
    // @Bean
    // @LoadBalanced
    // public RestTemplate restTemplate() {
    //     return new RestTemplate();
    // }
 
	// 推荐builder模式创建 RestTemplate
	@Bean
	@LoadBalanced  // Nacos注册中心,默认使用 Ribbon 负载均衡
	public RestTemplate restTemplate(RestTemplateBuilder builder){
		RestTemplate restTemplate = builder.build();
		return restTemplate;
	}

}
3、使用 RestTemplate进行服务调用
    @Autowired
    private RestTemplate restTemplate; //默认是轮询

	@RequestMapping(value = "/findOrderByUserId/{id}")
	public R findOrderByUserId(@PathVariable("id") Integer id) {
		log.info("根据userId=" + id + "查询订单信息");

		// restTemplate调用, url写死
		//String url = "http://localhost:18082/order/findOrderByUserId/" + id;

		/**
		 * Nacos注册中心,默认使用 Ribbon 负载均衡,restTemplate需要添加@LoadBalanced注解。
		 * 使用微服务名:ip:port替换为app-order
		 */
		String url = "http://app-order/order/findOrderByUserId/" + id;

		R result = restTemplate.getForObject(url, R.class);
		return result;
	}

浏览器访问测试ok:http://localhost:18081/app-user/user/findOrderByUserId/1,返回数据:

在这里插入图片描述

二、Ribbon负载均衡策略 1、修改默认负载均衡策略

修改application.yml。指定微服务调用时,使用对应的负载均衡算法。比如指定 Nacos提供的负载均衡策略。

# 被调用的微服务名
app-order:
  ribbon:
    # 指定使用Nacos提供的负载均衡策略(基于随机&权重)
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
2、自定义负载均衡策略

通过实现 IRule 接口或者继承 AbstractLoadBalancerRule类可以自定义负载策略,主要的选择服务逻辑在 choose 方法中。

2.1 创建自定义负载策略类
@Slf4j
public class MyCustomRandomRule extends AbstractLoadBalancerRule {

	@Override
	public Server choose(Object key) {
		ILoadBalancer loadBalancer = this.getLoadBalancer();

		// 获得当前请求的服务的实例
		List reachableServers = loadBalancer.getReachableServers();

		// 随机
		int random = ThreadLocalRandom.current().nextInt(reachableServers.size());
		Server server = reachableServers.get(random);
		log.info("随机获取服务实例:server.port={}", server.getPort());

		return server;
	}

	@Override
	public void initWithNiwsConfig(IClientConfig iClientConfig) {

	}
}
2.2 配置自定义的策略

修改application.yml。

# 被调用的微服务名
app-order:
  ribbon:
    # 自定义的负载均衡策略(基于随机)
    NFLoadBalancerRuleClassName: com.charge.xxx.MyCustomRandomRule

在这里插入图片描述

3、开启饥饿加载

Ribbon默认懒加载,表示只有在发起服务调用时才会加载客户端。如果网络情况不好,在第一次进行服务调用会超时。

在这里插入图片描述

我们可以开启 Ribbon饥饿加载,即服务启动时就加载客户端,解决第一次调用慢的问题。

ribbon:
  eager-load:
    # 开启ribbon饥饿加载
    enabled: true
    # 配置那个微服务名使用ribbon饥饿加载,多个使用逗号分隔
    clients: app-order 

在这里插入图片描述

– 求知若饥,虚心若愚。

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0399s