SpringCloud LoadBalancer 负载均衡器

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: SpringCloud LoadBalancer 负载均衡器

RestTemplate  整合 LoadBalancer

项目 studyuser 添加loadBalancer 依赖  , 在nacos服务注册 上去除  

netflix-ribbon 的支持

<!-- 添加loadBalancer 负载均衡器 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- nacos服务注册与发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>

在yml 上禁用ribbon , 其实你不引用ribbon 应该也行

spring:
  application:
    name: user-server
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: 2a57e550-6295-4269-b1b4-268c46021020
    # 不适用ribbon
    loadbalancer:
      ribbon:
        enabled: false

配置loadBalanced  的bean

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

在controller 层进行调用测试

@RequestMapping(value = "/findOrderByUserId/{id}")
public R findOrderByUserId(@PathVariable("id") Integer id) {
    log.info("根据userId:" + id + "查询订单信息");
    // 添加@LoadBalanced
    String url = "http://order-server/order/findOrderByUserId/" + id;
    R result = restTemplate.getForObject(url, R.class);
    return result;
}   

测试结果

2021-08-04 11:28:22.568  INFO 18236 --- [nio-8010-exec-1] c.jiuge.user.controller.UserController   : 根据userId:2查询订单信息
2021-08-04 11:28:24.341  INFO 18236 --- [nio-8010-exec-2] c.jiuge.user.controller.UserController   : 根据userId:2查询订单信息

WebClient 整合 LoadBalancer

引入依赖

<!-- 添加webflux 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

配置webClient作为负载均衡器的client

@Bean
WebClient webClient(){
    return WebClient.builder().build();
}

在UserController 中使用

@Autowired
private WebClient webClient;
@RequestMapping(value = "/findOrderByUserId/{id}")
public Mono<R> findOrderByUserId(@PathVariable("id") Integer id) {
    log.info("根据userId:" + id + "查询订单信息");
    String url = "http://localhost:8020/order/findOrderByUserId/"+id;
    Mono<R> result = webClient.get().uri(url).retrieve().bodyToMono(R.class);
    return result;
}

测试,验证

使用WebClient 结合 WebFlux 使用

@Autowired
private ReactorLoadBalancerExchangeFilterFunction lbfilter;
@GetMapping(value = "/findOrderByUserIdWithWebFlux/{id}")
public Mono<R> findOrderByUserIdWithWebFlux(@PathVariable("id")Integer id){
    String url = "http://order-server/order/findOrderByUserId/"+id;
    // 基于WebClient + webFlux
    Mono<R> result = WebClient.builder().filter(lbfilter).build().get().uri(url).retrieve().bodyToMono(R.class);
    return result;
}

测试,验证

相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
24天前
|
缓存 负载均衡 Java
Java一分钟之-Spring Cloud Netflix Ribbon:客户端负载均衡
【6月更文挑战第9天】Spring Cloud Netflix Ribbon是客户端负载均衡器,用于服务间的智能路由。本文介绍了Ribbon的基本概念、快速入门步骤,包括添加依赖、配置服务调用和使用RestTemplate。此外,还讨论了常见问题,如服务实例选择不均、超时和重试设置不当、服务列表更新不及时,并提供了相应的解决策略。最后,展示了如何自定义负载均衡策略。理解并正确使用Ribbon能提升微服务架构的稳定性和效率。
84 3
|
7天前
|
负载均衡 算法 Nacos
SpringCloud之LoadBalancer自定义负载均衡算法,基于nacos权重
ReactorLoadBalancer接口,实现自定义负载算法需要实现该接口,并实现choose逻辑,选取对应的节点。
16 0
|
7天前
|
Java Nacos Spring
SpringCloud之LoadBalancer负载均衡器的简单使用
RoundRobin: 轮询策略,意思循环往复的的服务进行选取。
15 0
|
2月前
|
负载均衡
【SpringCloud】Ribbon负载均衡原理、负载均衡策略、饥饿加载
【SpringCloud】Ribbon负载均衡原理、负载均衡策略、饥饿加载
28 0
|
1月前
|
人工智能 Java Spring
使用 Spring Cloud Alibaba AI 构建 RAG 应用
本文介绍了RAG(Retrieval Augmented Generation)技术,它结合了检索和生成模型以提供更准确的AI响应。示例中,数据集(包含啤酒信息)被加载到Redis矢量数据库,Spring Cloud Alibaba AI Starter用于构建一个Spring项目,演示如何在接收到用户查询时检索相关文档并生成回答。代码示例展示了数据加载到Redis以及RAG应用的工作流程,用户可以通过Web API接口进行交互。
52344 62
|
12天前
|
监控 Java 应用服务中间件
替代 Hystrix,Spring Cloud Alibaba Sentinel 快速入门
替代 Hystrix,Spring Cloud Alibaba Sentinel 快速入门
|
29天前
|
消息中间件 Java 持续交付
Spring Cloud Alibaba 项目搭建步骤和注意事项
Spring Cloud Alibaba 项目搭建步骤和注意事项
214 0
Spring Cloud Alibaba 项目搭建步骤和注意事项
|
27天前
|
存储 SpringCloudAlibaba 关系型数据库
springcloud alibaba(5)
springcloud alibaba
98 0
|
27天前
|
SpringCloudAlibaba Nacos
springcloud alibaba(4)
springcloud alibaba
125 0
|
27天前
|
SpringCloudAlibaba 容灾 测试技术
springcloud alibaba(3)
springcloud alibaba
69 0