webclient负载均衡踩坑

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: webclient负载均衡踩坑

今天踩坑

import cn.dev33.satoken.same.SaSameUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

/**
 * UserClient
 *
 * @author VampireAchao<achao @ hutool.cn>
 */
@Service
public class UserClient {

    private final WebClient webClient;

    @Autowired
    public UserClient(WebClient.Builder loadBalancedWebClientBuilder) {
        this.webClient = loadBalancedWebClientBuilder.baseUrl("http://user-service").build();
    }

    public Mono<Users> selectUserById(Object userId) {
        return webClient.get()
                .uri("/user/getUserBy/{userId}", userId)
                .headers(m -> {
                    m.add(SaSameUtil.SAME_TOKEN, SaSameUtil.getToken());
                })
                .retrieve().bodyToMono(String.class)
                .map(str -> JsonUtils.getResData(str, Users.class))
                .doOnError(Throwable::printStackTrace);
    }

}

这里是这么注入的:

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient.Builder webClientBuilder() {
        return WebClient.builder();
    }

    @Bean("loadBalancedWebClientBuilder")
    @LoadBalanced
    public WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
    }
}

看起来没问题,但是一直报错:

failed to resolve 'user-service' after 2 queries

然后排查了很久才发现是依赖没有引入…

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

这里因为看到了@LoadBalanced注解成功引入,所以先入为主认为依赖引入了,没有排查依赖,浪费了很久时间

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
负载均衡 Java 开发者
Ribbon框架实现客户端负载均衡的方法与技巧
Ribbon框架为微服务架构中的客户端负载均衡提供了强大的支持。通过简单的配置和集成,开发者可以轻松地在应用中实现服务的发现、选择和负载均衡。适当地使用Ribbon,配合其他Spring Cloud组件,可以有效提升微服务架构的可用性和性能。
33 0
|
4月前
|
负载均衡 算法 网络协议
Ribbon 负载均衡源码解读
Ribbon 负载均衡源码解读
61 15
Ribbon 负载均衡源码解读
|
3月前
|
负载均衡 算法 微服务
基于gRPC的注册发现与负载均衡的原理和实战
基于gRPC的注册发现与负载均衡的原理和实战
|
存储 负载均衡 算法
【JavaWeb】负载均衡算法介绍
【JavaWeb】负载均衡算法介绍
62 1
|
存储 负载均衡 NoSQL
Nginx如何实现负载均衡以及Session共享教程详解
最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大.. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
2433 0
|
负载均衡 算法 网络协议
反向代理服务器和负载均衡器的区别是什么?底层原理是什么?
反向代理服务器和负载均衡器的区别是什么?底层原理是什么?
225 0
|
负载均衡 算法 Java
负载均衡(Ribbon)-原来如此简单
负载均衡(Ribbon)-原来如此简单
227 0
负载均衡(Ribbon)-原来如此简单
|
负载均衡 网络协议 算法
关于开发中负载均衡(代理)的一些笔记
如果能深刻理解苦难,苦难就会给人带来崇高感 。 ——路遥
188 0
关于开发中负载均衡(代理)的一些笔记
|
弹性计算 负载均衡 监控
负载均衡进阶:SLB常见问题解决方法
在由云栖社区和阿里云网络团队联合主办的2017阿里云网络技术在线高峰论坛上,阿里云技术专家添毅分享了网络产品部根据客户和阿里云运维的反馈提炼出的几大最主要和最常见的在使用SLB产品中发生的问题,并为大家介绍了针对这些常见问题的相应处理方法。
13418 0

相关实验场景

更多