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

LoadBalancer(负载均衡器)是一种网络设备或软件,用于将网络流量分配到多个服务器,以实现负载均衡和高可用性。它可以帮助确保网络服务器能够有效地处理大量的请求,并避免某些服务器过载而导致性能下降或服务不可用。

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

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

LoadBalancer 在工作时分成两步:
第一步,先选择ConsulServer从服务端查询并拉取服务列表,知道了它有多个服务(上图3个服务),这3个实现是完全一样的,
默认轮询调用谁都可以正常执行。
第二步,按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址,所以LoadBalancer是一个客户端的负载均衡器。

//在800端口拷贝与8001端口一样的服务

在这里插入图片描述

Consul数据持久化配置

//在consul同级目录下新建consul_startt.bat文件,内容如下
@echo.服务启动......  
@echo off  
@sc create Consul binpath= "D:\devSoft\consul_1.17.0_windows_386\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect  1  -data-dir D:\devSoft\consul_1.17.0_windows_386\mydata   "
@net start Consul
@sc config Consul start= AUTO  
@echo.Consul start is OK......success
@pause

**注意:**consul里data配置的缩进不要用tab键,要用空格
在这里插入图片描述

修改80端口(调用端口)

//在80端口服务pom文件中添加依赖
<!--loadbalancer-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

//修改controller
    @GetMapping("/consumer/pay/get/info")
    public String getByConsul() {
        return restTemplate.getForObject(paymentSrv_URL+"/pay/get/info", String.class);
    }

在这里插入图片描述

会自动交替调用8001端口和8002端口
在这里插入图片描述
在这里插入图片描述
通过DiscoveryClient动态获取服务列表

    @Resource
    private DiscoveryClient discoveryClient;
    @GetMapping("/consumer/discovery")
    public String discovery()
    {
        List<String> services = discoveryClient.getServices();
        for (String element : services) {
            System.out.println(element);
        }

        System.out.println("===================================");

        List<ServiceInstance> instances = discoveryClient.getInstances("cloud-payment-service");
        for (ServiceInstance element : instances) {
            System.out.println(element.getServiceId()+"\t"+element.getHost()+"\t"+element.getPort()+"\t"+element.getUri());
        }

        return instances.get(0).getServiceId()+":"+instances.get(0).getPort();
    }

负载均衡有两种算法:轮询算法 和 随机算法 一般用轮询

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值