配置微服务负载均衡的两种方式

news2024/12/23 15:17:40

说明:在微服务开发中,每个服务是通过服务名称来区分的,当两个微服务名称相同时,注册中心会视为这两个服务是相同的。配置对应的负载均衡策略,当其他服务发送请求过来的时,可以对这两个微服务进行规则访问。

搭建环境

创建两个服务,订单服务(端口8081)、用户服务(开启两个,一个端口8082、一个8084),查询订单时,订单服务会发请求给用户服务,查询该订单对应的用户信息。注册中心使用的是eureka(端口8083),服务间通信使用RestTemplate。

在这里插入图片描述

(手动注入RestTemplate对象到IOC容器中,需要增加@LoadBalanced注解,不然程序会无法启动)

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class AddBean {

	@LoadBalanced
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

(查询订单信息,需要使用RestTemplate向用户服务查询用户信息)

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;


    @Override
    public Order getOrder(Long id) {

        Order order = orderMapper.getOrder(id);

        // 使用restTemplate的getForEntity()方法向用户模块发送请求
        ResponseEntity<User> entity = restTemplate.getForEntity("http://USERSERVICE/user?id=" + order.getUserId(), User.class);

        // 响应结果是一个response实例,先判断响应状态码是不是成功
        if (entity.getStatusCode().is2xxSuccessful()) {

            // 取出响应数据使用
            User user = entity.getBody();
            order.setUser(user);
        }

        return order;
    }

(在用户服务的Controller类中,打印请求的端口号,用来识别是哪个服务在处理请求)

    @Autowired
    private HttpServletRequest request;

    @GetMapping
    public String getUser(Long id){
        System.out.println("端口号:" + request.getLocalPort());
        return JSONUtil.toJsonStr(userService.getUser(id));
    }

四个程序全部启动,默认情况,负载均衡策略是轮询,即两个用户服务是被轮流访问的;

在这里插入图片描述

方式一:配置文件设置

在订单服务的配置文件中,增加下面这行配置,可配置对应的负载均衡策略,com.netflix.loadbalancer.RandomRule 为随机访问;

# 给userservice配置负载均衡规则(随机访问),配置在欲访问该服务的一端,而不是服务端
userservice.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

在这里插入图片描述

另外,还有其他访问策略,可在(DefaultClientConfigImpl)类中查找

在这里插入图片描述

方式二:添加IRule

在配置类中,手动添加IRule(负载均衡策略)对象

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RoundRobinRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class AddBean {

    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

    /**
     * 设置负载均衡策略(随机访问)
     * @return
     */
    @Bean
    public IRule randomRule() {
        return new RandomRule();
    }
}

可以在IRule接口中,找到如下实现类,都是对应的负载均衡策略;

在这里插入图片描述

把方式一添加的配置注释掉,重启订单服务,可以看到用户服务被随机访问

在这里插入图片描述

总结

在Eureka、@LoadBalanced的情况下,相同微服务的负载均衡是轮询,可通过以上两种方式配置服务的负载均衡策略,不同的是,方式一可以针对某一服务设置负载均衡测试,而方式二是全局设置。

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

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

相关文章

Linux的起源

UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中&#xff0c;UNIX 诞生于 20 世纪 60 年代末&#xff0c;Windows 诞生于 20 世纪 80 年代中期&#xff0c;Linux 诞生于 20 世纪 90 年代初&#xff0c;可以说 UNIX 是操作系统中的"老大哥&…

Prompt本质解密及Evaluation实战与源码解析(二)

9.4 Evaluation for Agents源码解析 如图9-4所示,转过来,我们再看一下LangChain框架代理评估(Evaluation for Agents)的源代码。 图9- 4 LangChain的evaluation agents目录 在trajectory_eval_prompt.py文件里面,写了一个非常经典的提示词。 1. """提示…

抽象轻松有点使用的JavaScript

数据类型转换 定义概念&#xff1a;将一种数据类型通过用特定的方法转换成另一种数据类型 拆分&#xff1a; 数据类型转换 A1&#xff08;一种数据类型&#xff09; A2&#xff08;方法&#xff09; A3&#xff08;转换成另一种数据类型&#xff09; 理解&#xff1a;A1 &…

使用STM32 再实现电动车防盗钥匙扣

实现目标 1. 点击遥控器 A 按键&#xff0c;系统进入警戒模式&#xff0c;一旦检测到震动&#xff08;小偷偷车&#xff09;&#xff0c;则喇叭发出声响报警 2. 点击遥控器 B 按键&#xff0c;系统退出警戒模式&#xff0c;再怎么摇晃系统都不会报警 硬件介绍 1. 震动传感器…

安装orcle报错:指定的 Oracle 系统标识符 (SID) 已在使用

安装orcle报错&#xff1a;[INS-35075]指定的 Oracle 系统标识符 (SID) 已在使用 说明前面的orcle没有彻底删除 解决这个问题&#xff1a; 搜索框 —— > 输入&#xff1a;regedit ——> 回车 运行regedit&#xff0c;选择HKEY_LOCAL_MACHINE SOFTWARE ORACLE&#xff…

【Android】从零搭建组件化项目

组件化系列文章介绍的内容稍微多了点&#xff0c;本着研究透这玩意的精神&#xff0c;从组件化的简介开始说起。 目录 简介组件化、模块化与插件化开始创建配置共享文件打包模式配置APT与JavaPoet 简介 什么是组件化&#xff1f; 将多个功能模板拆分、重组的过程。 为什么要使…

GEE入门学习,遥感云大数据分析、管理与可视化以及在林业应用丨灾害、水体与湿地领域应用丨GPT模型应用

目录 ①海量遥感数据处理与GEE云计算技术实践应用 ②GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践应用 ③GEE遥感云大数据林业应用典型案例实践及GPT模型应用 ④遥感云大数据在灾害、水体与湿地领域典型案例实践及GPT模型应用 ①海量遥感…

78. 左旋转字符串

目录 链接&#xff1a; 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 图片&#xff1a; 链接&#xff1a; 原题链接 题目&#xff1a; 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。 请定义一个函数实现字符串左旋转操作的功能。 比如输入字…

Talk预告 | 天津大学博士生赵煜:从平面图像中理解空间语义 - 视觉空间位置描述

本期为TechBeat人工智能社区第512期线上Talk&#xff01; 北京时间7月12日(周三)20:00&#xff0c; 天津大学博士生—赵煜的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “从平面图像中理解空间语义-视觉空间位置描述”&#xff0c;届时将与大家…

webpack插件安装

webpack插件安装 1、html-webpack-plugin插件2 、css-loader和style-loader插件3、less-load插件 1、html-webpack-plugin插件 1、下载插件 yarn add html-webpack-plugin -D2、webpack.config.js添加配置 *const HtmlWebpackPlugin require(html-webpack-plugin); const p…

Linux系统编程(信号处理机制)

文章目录 前言一、中断&#xff0c;异常&#xff0c;信号的区别二、信号在Linux中的标识三、信号处理相关函数四、代码实验总结 前言 本篇文章我们来讲解信号的处理机制&#xff0c;信号处理在Linux操作系统中必不可少&#xff0c;这一点值得大家注意&#xff0c;信号又会与中…

打通前后端 -- 创建第一个JSP页面

前言 JSP是由Sun Microsystems公司主导创建的一种动态网页技术标准。 JSP部署于网络服务器上&#xff0c;可以响应客户端发送的请求&#xff0c;并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页&#xff0c;然后返回给请求者。 JSP技术以Java语言作为脚本语言&…

从0-100:约拍小程序开发笔记

背景 摄影师预约小程序功能是一种方便摄影师和客户之间进行预约和安排拍摄的工具。通过该功能&#xff0c;摄影师可以在小程序上设置自己的可预约时间&#xff0c;客户可以根据摄影师的日程安排选择合适的时间进行预约。这样可以提高预约的效率&#xff0c;减少沟通成本&#…

【工具】tempormonkey 同步插件

tempormonkey 同步插件 1.打开tempormonkey的dashboard界面 2.右上角的setting 3.选择谷歌云盘

数字孪生建筑3D可视化运维管理平台降低成本

深圳是我国数字经济重镇&#xff0c;数字经济核心产业增加值占全市GDP逾三成&#xff0c;数字产业化和产业数字化正呈双向融合发展之势。越来越多的企业正与深圳华锐视点一道&#xff0c;利用互联网、大数据、云计算、人工智能、区块链、5G、数字孪生等技术优势&#xff0c;赋能…

Red Hat Linux官网下载地址

注册一个账号&#xff0c;就可以从官网下载最新版本的Red Hat 企业版Linux。

从0到100:定制公交预约小程序开发笔记

业务背景 可以让用户通过手机随时随地进行公交车的预约&#xff0c;无需排队等候&#xff0c;节省了用户的时间和精力。通过公交预约小程序&#xff0c;用户可以提前预约座位&#xff0c;避免了拥挤和等待时间&#xff0c;提高了公交出行的效率。可以根据用户的预约情况&#…

软考A计划-系统集成项目管理工程师-项目成本管理-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

k8s 的命名空间一直 Terminating

查看命名空间状态&#xff0c;[NAMESPACE] 处于 Terminating kubectl get ns使用强制删除命令没有效果 kubectl delete namespace [namespace] --force --grace-period0 解决办法&#xff1a;删除部署文件 yaml 中的 finalizers 属性 kubectl get namespace [NAMESPACE] -o …

AIGCxRPA打造更智能的数字员工,帮助千行万业实现新生产力的跃升

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 金融行业&#xff0c;长久以来一直是新科技的最佳试验场。作为一个高度数字化、信息密集的行业&#xff0c;金融业对于新科技的吸纳和应用具有天然的优势和需求。数字经济的崛起&#xff0c;更加快了金融行业对智能化的渴望…