Springboot 实践(20)负载均衡器Ribbon

        Ribbon是Netflix发布的负载均衡器,协助控制HTTP和TCP客户端的行为;为Ribbon配置服务提供者地址后,Ribbon就可基于负载均衡算法自动地帮助服务消费者去请求。Ribbon默认提供了很多负载均衡算法,例如:轮询、随机等;也可以为Ribbon实现自定义负载均衡算法。

        创建消费者工程,命名为Springboot-LoadBalance-consumer2项目,拷贝Springboot-LoadBalance-consumer工程,修改如下内容:

1、启动函数

@EnableDiscoveryClient

@SpringBootApplication

public class MangoConsumerApplication {

    public static void main(String[] args) {

        SpringApplication.run(MangoConsumerApplication.class, args);

    }

  

    @Bean

    @LoadBalanced

    public RestTemplate restTemplate() {

        return new RestTemplate();

    }

}

备注:@LoadBalanced注解的作用是对服务开启负载均衡,默认的负载均衡方式是轮询。

2、添加服务

        新建一个控制类,注入RestTemplate,并调用服务提供者hello服务。

@RestController

public class RibbonHelloController {

    @Autowired

    private RestTemplate restTemplate;   

    @RequestMapping("/ribbon/call")

    public String call() {

        String callServiceResult = restTemplate.getForObject("http://mango-producer/hello", String.class);

        return callServiceResult;

    }

}

备注:使用http:// service-producer/hello调用服务, service-producer为注册的服务名称,LoadBalancerInterceptor会拦截调用并根据服务名找到对应的服务。

3、测试

在浏览器中连续两次使用http://localhost:8006/ribbon/call调用服务,得到结果如下:

说明ribbon负载均衡已经成功启动了。

4、ribbon负载均衡策略配置方式

(1)在配置类中注入一个新的IRule(举例为随机均衡策略,当然这种为全局进行配置,也就是该服务中得分所有规则都将采用配置得负载均衡规则。)

@Bean

public IRule randomRule(){

return new RandomRule();

}

(2)在yml文件中进行配置(这样得配置可以针对某一个服务改变他得负载均衡策略,以下图中就只针对了service-producer服务及逆行配置,也就是说在本服务下,只有service-producer采取随机负载均衡策略,其他得服务还是轮询负载均衡策略。)

service-producer:

          ribbon:   

              NFLoadBalancerRuleClassName:

                   com.netflix.loadbalancer.RandomRule #负载均衡规则

你可能感兴趣的:(spring,boot,负载均衡,ribbon)