springcloud入门基础搭建之ribbon

目录

1.ribbon使用

2.切换负载均衡算法

2.1注册负载均衡算法

2.2自定义负载均衡算法

传送门


1.ribbon使用

        父项目版本详见:https://blog.csdn.net/bfss_11/article/details/119056522

        涉及到的文件

        

        在前一篇搭建eureka服务过程中,实际已经使用到了ribbon。因为在eureka中已经包含了ribbon相关依赖,所以不需要额外引入ribbon依赖。

下面为eureka依赖,已包含ribbon相关

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

        使用:

        在resttemplate上添加@LoadBalanced启动负重均衡,默认采用轮询算法

    @Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

2.切换负载均衡算法

2.1注册负载均衡算法

 spring-cloud-starter-netflix-eureka-client  2.2.9.RELEASE及之前的版本 

通过@Bean方式注册随机算法。类名上需要添加@Configuration

package com.zy.config;

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

@Configuration
public class MyRule {

    @Bean
    IRule myRandomRule() {
        return new RandomRule();
    }

}

2.2自定义负载均衡算法

      

        继承AbstractLoadBalancerRule。

        该算法思路为:每个服务调用3次,示例如下。


package com.zy.config;

import java.util.List;

import org.apache.commons.collections4.CollectionUtils;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;

public class MyLoadBalancer extends AbstractLoadBalancerRule {

    private int total = 0;// 调用了几次
    private int currentIndex = 0;// 当前调用者

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

    private Server choose(ILoadBalancer lb, Object key) {
        if (lb == null) {
            return null;
        }
        List<Server> reachableServers = lb.getReachableServers();
        if (CollectionUtils.isEmpty(reachableServers)) {
            return null;
        }
        
        Server server = null;
        if (total < 3) {
            server = reachableServers.get(currentIndex);
            total++;
        } else {
            total = 1;
            currentIndex++;
            if (currentIndex >= reachableServers.size()) {
                currentIndex = 0;
            }
            server = reachableServers.get(currentIndex);
        }
        return server;
    }

    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {
        // TODO Auto-generated method stub

    }

}

        注册该负载均衡算法

3.0.0及之后的版本负载均衡算法继承自ReactorLoadBalancer

	@Bean
	ReactorLoadBalancer<ServiceInstance> myRandomLoadBalancer(Environment environment,
			LoadBalancerClientFactory loadBalancerClientFactory) {
		String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
		return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),
				name);
	}

传送门

  1. springcloud入门基础搭建之组件版本
  2. springcloud入门基础搭建之eureka
  3. springcloud入门基础搭建之ribbon
  4. springcloud入门基础搭建之feign
  5. springcloud入门基础搭建之hystrix
  6. springcloud入门基础搭建之zuul
  7. springcloud入门基础搭建之config
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值