【springboot】整合LoadBalancer

news2024/10/4 15:06:20

目录

  • 问题产生背景
  • 解决方案:实现LoadBalancer
    • 1. 添加依赖
    • 2. 配置文件
    • 3. 使用LoadBalancer
    • 4. 使用 RestTemplate 进行服务调用
    • 5. 测试

问题产生背景

      以下是一个购物车项目,通过调用外部接口获取商品信息,并添加到购物车中,这段代码中有一个问题:下面的代码中直接指定了调用的url,但如果存在多个resfood服务的url,就需要修改代码,如果存在多个,就无法保证调用的url来自不同的resfood服务,所以需要使用负载均衡。负载均衡可以实现将请求平均分配到各个服务上,避免出现一直调用同一个服务的情况。

    @Value("${resfood.url}")
    private String resfoodUrl;
    /**
     * 调用外部接口,获取商品信息,并添加到itemList中
     * @param fid
     * @param item
     * @param itemList
     */
    private void addItem(int fid, CartItem item, List<CartItem> itemList) {
        String url = resfoodUrl+fid;
        Map<String,Object> result = restTemplate.getForObject(url, Map.class);
        System.out.println(result);
        System.out.println(result.get("obj").getClass().getSimpleName());
        // ObjectMapper是Jackson提供的一个类,用于将json数据转换为java对象
        Resfood resfood = objectMapper.convertValue(result.get("obj"), Resfood.class);
//        CartItem cartItem = new CartItem();
        //原来的item
        item.setFood(resfood);
        //处理数量小于0的情况
        if(item.getNum()<=0){
            return;
        }
//            item.setNum(0);
//        cartItem.setNum(item.getNum());
        itemList.add(item);
    }

解决方案:实现LoadBalancer

      实现 Spring Cloud LoadBalancer 的前提条件:当前服务与当前服务调用的服务需要实现服务注册与发现。

1. 添加依赖

        <!--       负载均衡依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!--        nacos场景依赖:nacos客户端,用于将当前的微服务注册到nacos服务器中-->
        <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

2. 配置文件

      配置nacos

  cloud:
    nacos:
      discovery:
#        nacos的服务器地址,根据实际情况修改
        server-addr: your_nacos_server_addr
        username: nacos
        password: nacos

3. 使用LoadBalancer

      在配置类中创建一个带有负载均衡功能的 RestTemplate Bean。

@Configuration
public class RestTemplateConfig {
    // 使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

4. 使用 RestTemplate 进行服务调用

      在代码中,使用 LoadBalanced 的 RestTemplate 调用服务。

    @Value("${resfood.url}")
    private String resfoodUrl;
    /**
     * 调用外部接口,获取商品信息,并添加到itemList中
     * @param fid
     * @param item
     * @param itemList
     */
    private void addItem(int fid, CartItem item, List<CartItem> itemList) {
        String url = resfoodUrl+fid;
        Map<String,Object> result = restTemplate.getForObject(url, Map.class);
        System.out.println(result);
        System.out.println(result.get("obj").getClass().getSimpleName());
        // ObjectMapper是Jackson提供的一个类,用于将json数据转换为java对象
        Resfood resfood = objectMapper.convertValue(result.get("obj"), Resfood.class);
//        CartItem cartItem = new CartItem();
        //原来的item
        item.setFood(resfood);
        //处理数量小于0的情况
        if(item.getNum()<=0){
            return;
        }
//            item.setNum(0);
//        cartItem.setNum(item.getNum());
        itemList.add(item);
    }

      使用服务名称代替url,让Spring Cloud LoadBalancer自动选择合适的服务实例。

resfood:
  url: http://res-food/resfood/getById/

5. 测试

      多开几个依赖的服务,请求需要测试的接口,测试是否能通过服务名称调用服务,并且负载均衡。

在这里插入图片描述

      请求发送到不同的服务上。

在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用ssm实现中学生课后服务的信息管理与推荐+vue

TOC ssm766中学生课后服务的信息管理与推荐vue 第一章 绪论 1.1 选题背景 目前整个社会发展的速度&#xff0c;严重依赖于互联网&#xff0c;如果没有了互联网的存在&#xff0c;市场可能会一蹶不振&#xff0c;严重影响经济的发展水平&#xff0c;影响人们的生活质量。计算…

查缺补漏----I/O中断处理过程

中断优先级包括响应优先级和处理优先级&#xff0c;响应优先级由硬件线路或查询程序的查询顺序决定&#xff0c;不可动态改变。处理优先级可利用中断屏蔽技术动态调整&#xff0c;以实现多重中断。下面来看他们如何运用在中断处理过程中&#xff1a; 中断控制器位于CPU和外设之…

SpringBoot开发:古典舞在线交流平台的架构与实现

第三章 系统分析 3.1 可行性分析 需要使用大部分精力开发的古典舞在线交流平台为了充分降低开发风险&#xff0c;特意在开发之前进行可行性分析这个验证系统开发是否可行的步骤。本文就会从技术角度&#xff0c;经济角度&#xff0c;还有操作角度等进行综合阐述。 3.1.1技术可行…

排序01 多目标模型

引入 使用机器学习方法对指标做预估&#xff0c;再对预估分数做融合。融合方法&#xff1a;加权和方法给不同指标赋予不同的权重&#xff0c;权重是做A/B test调试得到的。还有更好地融合方法。 多目标模型 排序模型的输入是各种各样的特征&#xff0c;用户特征主要是用户id和…

易趋(EasyTrack)资深顾问唐颖受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 易趋&#xff08;EasyTrack&#xff09;资深顾问唐颖女士受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“隐形翅膀——数字化项目管理助力项目经理鹏程万里”。大会将于10月26-…

古典舞在线互动:SpringBoot平台设计与功能实现

第三章 系统分析 3.1 可行性分析 需要使用大部分精力开发的古典舞在线交流平台为了充分降低开发风险&#xff0c;特意在开发之前进行可行性分析这个验证系统开发是否可行的步骤。本文就会从技术角度&#xff0c;经济角度&#xff0c;还有操作角度等进行综合阐述。 3.1.1技术可行…

Prometheus之Pushgateway使用

Pushgateway属于整个架构图的这一部分 The Pushgateway is an intermediary service which allows you to push metrics from jobs which cannot be scraped. The Prometheus Pushgateway exists to allow ephemeral and batch jobs to expose their metrics to Prometheus. S…

扩散引导语言建模(DGLM):一种可控且高效的AI对齐方法

随着大型语言模型(LLMs)的迅速普及,如何有效地引导它们生成安全、适合特定应用和目标受众的内容成为一个关键挑战。例如,我们可能希望语言模型在与幼儿园孩子互动时使用不同的语言,或在撰写喜剧小品、提供法律支持或总结新闻文章时采用不同的风格。 目前,最成功的LLM范式是训练…

使用python基于DeepLabv3实现对图片进行语义分割

DeepLabv3 介绍 DeepLabv3 是一种先进的语义分割模型&#xff0c;由 Google Research 团队提出。它在 DeepLab 系列模型的基础上进行了改进&#xff0c;旨在提高图像中像素级分类的准确性。以下是 DeepLabv3 的详细介绍&#xff1a; 概述DeepLabv3 是 DeepLab 系列中的第三代…

无人机控制和飞行、路径规划技术分析

无人机控制和飞行、路径规划技术是现代无人机技术的核心组成部分&#xff0c;它们共同决定了无人机的性能和应用范围。以下是对这些技术的详细分析&#xff1a; 一、无人机控制技术 无人机控制技术主要涉及飞行控制系统的设计、传感器数据的处理以及指令的发送与执行。飞行控…

新闻推荐系统开发:Spring Boot实践指南

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

厂商资源分享网站

新华三&#xff08;H3C&#xff09;是一家中国知名的网络设备供应商&#xff0c;提供网络设备、网络解决方案和云计算服务。公司成立于2003年&#xff0c;是华为公司和惠普公司合资的企业&#xff0c;总部位于中国深圳。 华为&#xff08;Huawei&#xff09;是一家全球知名的电…

本地运行LLama 3.2的三种方法

大型语言模型&#xff08;LLMs&#xff09;已经彻底改变了AI领域&#xff0c;小型模型也在崛起。因此&#xff0c;即使是在旧的PC和智能手机上运行先进的LLMs也成为了可能。为了给大家一个起点&#xff0c;我们将探索三种不同的方法来本地与LLama 3.2进行交互。 先决条件 在我…

【2022工业3D异常检测文献】AST: 基于归一化流的双射性产生不对称学生-教师异常检测方法

Asymmetric Student-Teacher Networks for Industrial Anomaly Detection 1、Background 所谓的学生-教师网络&#xff0c;首先&#xff0c;对教师进行训练&#xff0c;以学习语义嵌入的辅助性训练任务&#xff1b;其次&#xff0c;训练学生以匹配教师的输出。主要目的是让学生…

YOLOv11改进 | Conv篇 | YOLOv11引入SAConv模块

1. SAConv介绍 1.1 摘要: 许多现代物体检测器通过使用三思而后行的机制表现出出色的性能。 在本文中,我们在目标检测的主干设计中探索了这种机制。 在宏观层面,我们提出了递归特征金字塔,它将特征金字塔网络的额外反馈连接合并到自下而上的骨干层中。 在微观层面,我们提出…

LabVIEW提高开发效率技巧----属性节点优化

在LabVIEW开发中&#xff0c;优化代码的效率和性能是非常重要的&#xff0c;尤其是在涉及前面板控件的属性节点时。频繁使用属性节点可能会导致程序执行速度的明显下降&#xff0c;特别是在处理大量数据或高频率操作时。下面详细介绍一些在LabVIEW开发中优化属性节点使用的技巧…

Vue3常用API总结

因为这个月的月初给自己定了个小目标&#xff0c;学完Vue3的基本使用&#xff0c;并使用Vue3亲手做一个小项目&#xff08;稍微透露一下&#xff0c;我制作的是一个小工具&#xff0c;现在已经完成了90&#xff05;了&#xff0c;这个月月底之前会通过博客的形式向大家展示&…

如何提高游戏本地化的质量使用QE门户网站Logrus IT

高质量的游戏本地化是全球市场成功的关键。这尤其适用于AAA和AA级别的游戏&#xff0c;玩家在这些游戏中投入了大量资金&#xff0c;并期望从中获得完美的游戏体验。尽管公司做出了努力&#xff0c;但传统的质量控制方法并不总是能够防止所有错误和本地化不准确。让我们更详细地…

【深度学习】交叉熵

交叉熵&#xff08;Cross-Entropy&#xff09;是信息论中的一个重要概念&#xff0c;也是在机器学习和深度学习中用于分类任务的常见损失函数。它衡量的是两个概率分布之间的差异&#xff0c;特别是模型的预测概率分布与真实分布的差异。 交叉熵最初是从信息论引入的&#xff0…

检查jar冲突,查找存在相同class的jar

写在前面 本文看下如何查找jar冲突&#xff0c;即查找哪些jar包中存在相同的class。如果是存在相同jar的不同版本&#xff0c;基本一眼就能看出来&#xff0c;然后结合maven的依赖关系将其剔除掉即可&#xff0c;但是当你遇到了有人手动拷贝某些class到jar包中导致冲突的情况时…