Spring Cloud LoadBalancer 实现负载均衡

一、使用场景

当一个服务具有多个实例时,我们希望流量可以合理的分配到多个实例中,此时我们可以使用 LoadBalancer 来实现负载均衡

基于上篇博客,我们再启动2个product-service实例

接下来演示启动多个实例方法:

1、打开service

2、右键要复制的实例,选择 Copy Configuration

3、改名并点击 modify options

4、选择 add VM options

5、添加 VM options: -Dserver.port = 9091

(9091为服务启动的端口号,可根据自己的情况进行修改)

同样的操作可以再启动多个实例,观察 Eureka,可以看到新启动的实例

但是此时我们启动服务,发现远程调用的都是同一台机器,此时我们可以使用 LoadBalancer 来实现均衡调用多台机器

二、使用方式

1、给 RestTemplate 这个 Bean 添加 @LoadBalanced 注解

package com.linzhixin.order.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@LoadBalancerClient(name = "product-service", configuration = CustomLoadBalancerConfiguration.class)
@Configuration
public class BeanConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

2、修改 IP 端口号为服务名称

public OrderInfo selectOrderById(Integer orderId) {
    OrderInfo orderInfo = orderMapper.selectOrderById(orderId);

    //String url = "http://127.0.0.1:9090/product/"+ orderInfo.getProductId();
    String url = "http://product-service/product/"+ orderInfo.getProductId();
    ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);

    orderInfo.setProductInfo(productInfo);
    return orderInfo;
}

3、按照上述方式启动多个 product-service 实例

4、测试负载均衡

连续多次发起请求:http://127.0.0.1:8080/order/1

观察 product-service 的日志,可以发现请求在多个实例上都有分配

还可以切换负载均衡策略(这里提供参考官网地址:):Spring Cloud LoadBalancer :: Spring Cloud Commons

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值