java 负载均衡框架_负载均衡Ribbon

## 常用负载均衡算法

1. 随机.

2. 轮询.

3. ip hash.

## Ribbon

Eureka中已经帮我们继承了负载均衡算法,在多个实例列表中进行选择.Ribbon,简单修改代码即可使用.

Ribbon是Netfilx发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为.为Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,自动的帮助服务消费者去请求.Ribbon默认为我们提供了很多的负载均衡算法,例如轮询,随机等.当然,我们也可为Ribbon实现自定义的负载均衡算法.

## 默认规则

Ribbon的默认规则是轮询.

## 修改默认规则

~~~

user-server: //服务名称

ribbon:

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule //修改为随机

~~~

## 配置

在消费者服务导入依赖:

~~~

org.springframework.cloud

spring-cloud-starter-netflix-ribbon

2.0.1.RELEASE

~~~

## 第一种使用方法

注入属性:

~~~

@Autowired

private RibbonLoadBalancerClient client;

~~~

获取服务实例:

~~~

//使用ribbon,内部已经用负载均衡为我们获取了实例

ServiceInstance instance = client.choose("user-server");

~~~

## 第二种使用方法

~~~

package com.like;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;

import org.springframework.context.annotation.Bean;

import org.springframework.web.client.RestTemplate;

@SpringBootApplication

@EnableDiscoveryClient

public class ConsumerServer

{

public static void main(String[] args)

{

SpringApplication.run(ConsumerServer.class);

}

@Bean

@LoadBalanced //加上此注解,得在RestTemplate这个bean上加才有效果

public RestTemplate restTemplate()

{

return new RestTemplate();

}

}

~~~

请求:

~~~

String url = "http://user-server/user/"; //中间直接写上服务的ID即可,ribbon会在RestTemplate内部使用拦截器进行负载均衡

return restTemplate.getForObject(url + id, User.class);

~~~

你可能感兴趣的:(java,负载均衡框架)