Spring Cloud(Kilburn 2022.0.2版本)系列教程(二) 服务消费者(RestTemplate+Loadbalancer)

Spring Cloud(Kilburn 2022.0.2版本)系列教程(二) 服务消费者(RestTemplate+Loadbalancer)

为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000

一、服务消费

可以参考上节eurekaClientConsumer

image-20230421163829719

在启动类中,我们已经注入了一个restTemplate了,并且在上面增加了@LoadBalanced注解,这个是导入的org.springframework.cloud.client.loadbalancer.LoadBalanced包下的,不是netflix包下的,因为新版本的SpringCloud已经弃用了Ribbon,使用的事Spring自家的负载均衡Loadbalancer

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

ConsumerController中新增方法eurekaClientConsumerChooseInstance,来看一下消费服务的时候到底调用的哪个URL

@RequestMapping("/eurekaClientConsumerChooseInstance")
public String eurekaClientConsumerChooseInstance() {
    ServiceInstance serviceInstance = loadBalancerClient.choose("eurekaClient");
    String server = serviceInstance.getInstanceId()+":"
      +serviceInstance.getHost()+":"
      +serviceInstance.getPort();
    System.out.println(server);
    return server;
}

二、Loadbalancer负载均衡

我们已经有一个eurekaClient的服务提供者,提供根据ID去查询用户的接口服务,为了体现负载均衡我们复制一下这个项目并修改名称为eurekaClientProvider,只需把端口号改成8002,其余都不变。

把所有项目都启动,稍等片刻,eureka上会有eurekaClienteurekaClientProvider注册上来。

image-20230421113420815

多次调用http://localhost:8001/eurekaClientConsumerChooseInstance,可以看到服务在80008002两个端口的服务器上轮询调用。

image-20230421161317480

三、切换Loadbalancer负载均衡策略

Loadbalancer一共有两种负载均衡策略,轮询和随机,分别对应于RoundRobinLoadBalancerRandomLoadBalancer

loadbalancer包下,新增一个配置类CustomLoadBalancerConfiguration。并设置默认策略为RandomLoadBalancer。注意类上面 不加 \textcolor{red}{不加} 不加@Configuration注解。

package cc.huerpu.eurekaclient.loadbalancer;

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;

public class CustomLoadBalancerConfiguration {
    @Bean
    public ReactorLoadBalancer<ServiceInstance> reactorServiceInstanceLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        //RoundRobinLoadBalancer RandomLoadBalancer
        return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
    }
}

在启动类EurekaClientConsumerApplication上增加@LoadBalancerClients配置,这个是全局的。

@LoadBalancerClients(defaultConfiguration = {CustomLoadBalancerConfiguration.class})

如果只是在特定的服务上使用这个策略,可以增加name属性,标识服务应用名。

@LoadBalancerClient(value = "eurekaClient", configuration = CustomLoadBalancerConfiguration.class)

重启应用,多次调用http://localhost:8001/eurekaClientConsumerChooseInstance,可以看到服务在80008002两个端口的服务器上随机调用。

image-20230421162502940

本文参考loadbalancer官方文档:https://docs.spring.io/spring-cloud-commons/docs/4.0.2/reference/html/#spring-cloud-loadbalancer

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋的凯尔森同学

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值