一起学SpringCloud之:第三章负载均衡ribbon

6 篇文章 0 订阅
4 篇文章 0 订阅

在上一篇的案例中,我们启动了一个user-service,然后后通过DiscoveryCilent来获取服务实例信息,让后获取ip和端口来访问。

但是在实际环境中,我们一般会开启很多user-service的形成集群。此时我们获取的服务列表中就会员多个服务,一般这种情况下我们就需要编写负载均衡算法,在多个实例列表中选择。

不过Eureka中已经帮我们继承了负载均衡组件:Ribbon,简单修改即可使用。

1:什么是Ribbon

在这里插入图片描述
接下来,我们就来使用Ribbon实现负载均衡。

2:代码编写

实现我们启动两个user-service实例,一个8081,一个8082。
在这里插入图片描述
在Eurake的控制面板上可以看到:
在这里插入图片描述
开启负载均衡

应为Eureka中已经集成了ribbon,所以我们无需映入行的依赖。直接修改代码:

在RestTemplate的配置方法上添加@LoadBalanced(翻译过来就是负载均衡的意思) 注解:

(写在启动类的下面)

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

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

public class UserService{
    @AutoWired
    private RestTemplate restTemplate;
    
   	public User queryUser(int id){
        String url = "http://user-service/user/selectOne/"+id;
        return restTemplate.getForObject(url,User.class);
    }
}

3 源码跟踪

可以看到我们只输入了Service 名称就可以访问了,之前还要服务的ip和端口

显然有人帮我们根基service名称,获取到了服务实例的ip和端口,他就是

LoadBealancerInterceptor(翻译过来就是负载均衡拦截器)

我们源码跟踪

在这里插入图片描述
在拦截器中获取我们输入的url地址,后解析出我们写的服务名称,然后后拉取得到Eureka中服务的ip和端口,在经过负载均衡算法,得到真正的访问地址。

4 负载均衡策略

Ribbon默认的负载均衡策略是简单的轮询。

编写测试类,在刚在的源码中我们看到拦截器中时使用RibbonLoadBalanceClient(负载均衡客户端)来进行负载均衡的。其中有一个choose方法,是这样简绍的。
在这里插入图片描述
(现在这个就是负载均衡获取实例的方法。)

我们对注入这个类的对象,然后对其测试:

@RunWith(StringRunner.class)
@SprngBootTest(classes = UserConsumerDemoApplication.class)
public class LoadBalancetest{
    
    @Autowired
    RibbonLoadBalncerCilent client;
    
    @Test
    public void test(){
        for (int i = 0; i < 10; i++) {
            ServiceInstance instance = this.client.choose("user-service");
            System.out.println(instance.getHost() + ":" + instance.getPort());
        }
    }
}

结果:

在这里插入图片描述
符合我们的预期推测, 确实是轮询的方式。

我们是否可以修改负载均衡的策略呢?

SpringBoot也帮我们提供了修改负载均衡规则的配置入口:

user-service.ribbon.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

这样设置是将策略修改为随机。

以上就是负载均衡ribbon的基本使用,获取更多内容请查看我的个人主页。请大家支持一下兄弟, 点个赞,不要白嫖了。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值