前言

这篇文章在上几篇文章的基础上,搭建负载均衡,有集群,必然有负载均衡,这篇文章,还是现讲负载均衡使用,然后下篇文章讲负载均衡源码底层实现
上文:Eureka集群(Eureka详解)
负载均衡在SpringCloud中非常好实现,很简单

准备

负载均衡是针对服务器而言的,所以首先我们要搭建三个服务器,形成集群,上篇文章讲了Eureka的集群
负载均衡Ribbon_负载均衡Spring实现
上述操作执行三次,我们集群搭建了三个服务器
负载均衡Ribbon_spring_02
负载均衡Ribbon_Ribbon使用_03

一、负载均衡Ribbon

因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。直接修改代码:

在客户端的RestTemplate的配置方法上添加@LoadBalanced注解:

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

负载均衡Ribbon_spring_04

修改调用方式,不再手动获取ip和端口,而是直接通过服务名称调用:

package com.czxy.userconsumerdemo.dao;

import com.czxy.userconsumerdemo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import java.util.List;

@Component
public class UserDao {

    @Autowired
    @LoadBalanced
    private RestTemplate restTemplate;

    // 必须导入org.springframework.cloud.client.discovery.DiscoveryClient
    @Autowired
    private DiscoveryClient discoveryClient;


    public User queryUserById(Long id){
		 // 地址直接写服务名称即可
         String url = "http://user-service/user/"+id;

        // 使用restTemplate发起请求
        ResponseEntity<User> entity = restTemplate.getForEntity(url, User.class);
        // 获取返回对象
        User user = entity.getBody();
        return user;
    }
}

访问页面,查看结果:
负载均衡Ribbon_spring_05
这就是负载均衡实现,一个注解,一段修改,SpringCloud就帮我们实现了,很简单开发
下篇文章详解Ribbon的底层原理,以及我为什么断定已经实现了负载均衡

祝你幸福
送你一首歌《I Just Wanna Run》The Downtown Fiction
附图:《I Just Wanna Run》
负载均衡Ribbon_Ribbon使用_06