SpringCloud--LoadBalancer负载均衡服务调用

目录

前言

一、LoadBalancer是什么?

二、使用步骤

1、启动consul

2、客户端加入依赖

3、以服务名称调用

三、负载均衡算法替换

1、 默认算法轮询(相同服务名下的所有服务枚举调用)

2、替换随机算法(相同服务名下的所有服务随机调用)

总结



前言

LoadBalancer是Ribbon的未来替换方案

一、LoadBalancer是什么?

LB负载均衡(Load Balance)是什么

简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用),常见的负载均衡有软件Nginx,LVS,硬件 F5等

spring-cloud-starter-loadbalancer组件是什么

Spring Cloud LoadBalancer是由SpringCloud官方提供的一个开源的、简单易用的客户端负载均衡器,它包含在SpringCloud-commons中用它来替换了以前的Ribbon组件。相比较于Ribbon,SpringCloud LoadBalancer不仅能够支持RestTemplate,还支持WebClient(WeClient是Spring Web Flux中提供的功能,可以实现响应式异步请求)

官网:http://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/loadbalancer.html 

客户端负载和服务端负载区别:

Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。

 

loadbalancer本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

二、使用步骤

1、启动consul

详见:SpringCloud--consul服务注册与发现、配置管理、配置持久化

2、客户端加入依赖

<!--loadbalancer-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

3、以服务名称调用

public static final String PaymentSrv_URL = "http://cloud-payment-service";//服务注册中心上的微服务名称
@GetMapping(value = "/consumer/pay/get/info")
private String getInfoByConsul(){
   return restTemplate.getForObject(PaymentSrv_URL + "/pay/get/info", String.class);
}

用restTemplate调用服务时,使用服务名称调用后,在consul中注册相同服务名称的的服务会通过loadbalancer实现负载均衡,使得每个相同服务名称的服务被访问的次数平均。

三、负载均衡算法替换

1、 默认算法轮询(相同服务名下的所有服务枚举调用)

restTemplate配置:

@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced //按服务名称调用时默认负载均衡 要加上该注解支持负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

2、替换随机算法(相同服务名下的所有服务随机调用)

restTemplate配置:

@Configuration
@LoadBalancerClient(
        //下面的value值大小写一定要和consul里面的名字一样,必须一样
        value = "cloud-payment-service",configuration = RestTemplateConfig.class)
public class RestTemplateConfig
{
    @Bean
    @LoadBalanced //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);

        return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
    }
}

总结

使用简单

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud LoadBalancerSpring Cloud 中的一个组件,用于提供负载均衡功能,可以帮助开发者在微服务架构中轻松地实现服务发现和负载均衡Spring Cloud LoadBalancer 提供了一套简单的 API 接口,允许开发者自定义负载均衡策略,并且支持多种负载均衡算法,例如轮询、随机等。它与 Spring Cloud服务注册与发现组件集成得很好,能够自动地将服务实例注册到负载均衡器中,并根据需要对服务实例进行负载均衡。 使用 Spring Cloud LoadBalancer 的好处是它可以帮助开发者快速实现服务发现和负载均衡功能,而无需手动编写繁琐的负载均衡算法和服务发现代码。此外,Spring Cloud LoadBalancer 还具有高度可扩展性和灵活性,可以与不同的负载均衡器集成,并且支持自定义的负载均衡算法。 总之,如果您正在使用 Spring Cloud 构建微服务架构,那么使用 Spring Cloud LoadBalancer 可以帮助您更轻松地实现服务发现和负载均衡功能,并且可以提高系统的可扩展性和灵活性。 ### 回答2: Spring Cloud LoadbalancerSpring Cloud提供的一个负载均衡器,用于在微服务架构中实现服务负载均衡。以下是使用Spring Cloud Loadbalancer的步骤: 1. 引入依赖:在项目的pom.xml文件中添加Spring Cloud Loadbalancer的依赖。 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> ``` 2. 创建服务调用类:首先,我们需要创建一个ServiceInstanceListSupplier的实现,以提供要进行负载均衡服务实例列表。 ```java import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.ServiceInstanceListSupplier; public class CustomServiceInstanceListSupplier implements ServiceInstanceListSupplier { // 实现ServiceInstanceListSupplier接口的方法 // 返回要进行负载均衡服务实例列表 } ``` 3. 注册服务调用类:将自定义的ServiceInstanceListSupplier注册到Spring容器。 ```java @Configuration public class LoadBalancerConfig { @Bean public ServiceInstanceListSupplier serviceInstanceListSupplier() { return new CustomServiceInstanceListSupplier(); } } ``` 4. 使用负载均衡器:在需要进行服务调用的地方,可以使用@LoadBalanced注解将RestTemplate、WebClient等进行负载均衡代理。 ```java @Autowired @LoadBalanced private RestTemplate restTemplate; // 在需要进行服务调用的地方,可以直接使用RestTemplate进行调用 ResponseEntity<String> response = restTemplate.getForEntity("http://service-provider/api/endpoint", String.class); ``` 5. 配置负载均衡策略:可以通过配置文件(application.yml或application.properties)来配置负载均衡器的策略。 ```yaml spring: cloud: loadbalancer: ribbon: enabled: false # 禁用默认的Ribbon负载均衡器 ``` 通过以上步骤,我们可以在Spring Cloud项目中使用Spring Cloud Loadbalancer来实现服务负载均衡。 ### 回答3: spring-cloud-loadbalancerSpring Cloud提供的一个负载均衡器,用于在微服务架构中实现服务负载均衡。我们可以通过以下步骤来使用spring-cloud-loadbalancer: 1. 在pom.xml文件中,添加spring-cloud-loadbalancer的依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> ``` 2. 创建一个自定义的负载均衡器配置类,实现LoadBalancerClient接口,并注入LoadBalancerProperties对象: ```java @Configuration public class MyLoadBalancerConfig { @Autowired private LoadBalancerProperties loadBalancerProperties; @Bean public LoadBalancerClient loadBalancerClient() { return new LoadBalancerClient() { // 实现接口方法,使用具体的负载均衡算法进行服务的选择 @Override public ServiceInstance choose(String serviceId) { // 在这里选择一个可用的服务实例并返回 } }; } } ``` 3. 创建一个服务消费者类,通过@LoadBalanced注解启用负载均衡能力: ```java @Service public class ConsumerService { @Autowired @LoadBalanced private RestTemplate restTemplate; public void consumeService() { // 发起对服务提供者的请求 ResponseEntity<String> response = restTemplate.getForEntity("http://service-provider/service", String.class); String result = response.getBody(); // 处理返回结果 } } ``` 4. 在应用启动类上添加@EnableDiscoveryClient注解,开启服务注册和发现的能力。 5. 在服务提供者的配置文件中,设置应用的名称和端口号。 6. 运行服务提供者和服务消费者,观察服务消费者通过负载均衡调用服务提供者的效果。 总结起来,使用spring-cloud-loadbalancer,首先需要添加依赖,然后实现一个自定义的负载均衡器配置类,再在服务消费者中注入负载均衡的RestTemplate,并通过@LoadBalanced注解启用负载均衡能力。最后,通过@EnableDiscoveryClient注解开启服务注册和发现的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值