Spring Cloud LoadBalancer負載均衡+算法切換

目錄

    • 介紹
    • 核心功能
    • 負載均衡
      • 啟動兩個支付服務
      • 訂單模塊引入依賴
      • @LoadBalanced 注解
      • 啟動訂單服務
      • 測試結果
    • 負載均衡算法切換
    • 總結

介紹


Spring Cloud LoadBalancer 是 Spring Cloud 提供的客戶端負載均衡解決方案,提供更現代化的 API 和更好的 Spring 生態系統集成。它支持微服務架構中服務調用的負載均衡,適用于分布式系統中的流量分發和故障轉移。

核心功能


客戶端負載均衡

  • 在客戶端實現負載均衡邏輯,無需服務端代理。
  • 支持基于服務名的調用 (如 http://service-name),自動解析服務實例列表。

多種負載均衡策略

  • 默認支持 輪詢 (Round Robin) 和隨機 (Random) 策略。
  • 可自定義實現其他策略 (如加權輪詢、最小連接數等)。

服務發現集成

  • 與 Spring Cloud 服務發現組件 (如 Eureka、Consul、Nacos) 無縫集成。
  • 動態獲取服務實例列表,支持實例上下線自動更新。

響應式支持

  • 支持阻塞式 (BlockingLoadBalancerClient) 和非阻塞式 (ReactiveLoadBalancer) 請求處理。
  • 可與 RestTemplate 和 WebClient 配合使用。

高可用與容錯

  • 內置重試機制 (如 spring.cloud.loadbalancer.retry.enabled=true)。
  • 支持健康檢查,自動剔除故障實例。

配置靈活性

  • 通過 application.yml 或 application.properties 配置行為。
  • 支持自定義負載均衡算法和規則。

負載均衡


啟動兩個支付服務

分別啟動兩個支付服務,端口8001和8002。
在這里插入圖片描述

訂單模塊引入依賴

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

@LoadBalanced 注解

給 RestTemplate 標注 @LoadBalanced 注解,在客戶端實現負載均衡功能。

@Configuration
public class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}

啟動訂單服務

啟動訂單服務,端口9001。

@GetMapping("/order/pay/getInfoByConsul")
public String getInfoByConsul() {return restTemplate.getForObject(payment_url + "/pay/getInfoByConsul", String.class);
}

在這里插入圖片描述

測試結果

當調用9001訂單接口 http://localhost:9001/order/pay/getInfoByConsul ,會輪詢調用8001和8002獲取 consul 配置信息。

負載均衡算法切換


負載均衡算法默認有兩種:

  • 輪詢: RoundRobinLoadBalancer
  • 隨機: RandomLoadBalancer

算法切換

從默認的輪詢,切換為隨機算法。

@Configuration
// value中的服務名大小寫必須和consul服務名一樣
@LoadBalancerClient(value = "cloud-payment-service", configuration = RestTemplateConfig.class)
public class RestTemplateConfig {@Bean@LoadBalanced  // 賦予RestTemplate負載均衡的能力public RestTemplate restTemplate(){return new RestTemplate();}@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}

總結


以上主要介紹了 Spring Cloud LoadBalancer 負載均衡、算法切換的相關知識,想了解更多 Spring Cloud LoadBalancer 知識的小伙伴請參考 Spring Cloud LoadBalancer 官網 進行學習,學習更多 Spring Cloud 實戰實用技巧的小伙伴,請關注后期發布的文章,認真看完一定能讓你有所收獲。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77194.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Chrome 瀏覽器插件收錄

1. Responsive Viewer 可以在同個窗口內&#xff0c;針對同一網站&#xff0c;添加多個不同設備屏幕顯示。 在前端開發&#xff0c;需要多端適配&#xff0c;尤其是移動端響應式適配的網站開發中&#xff0c;可以同時測試多個不同屏幕的適配效果。 2. VisBug 提供工具欄&#x…

SQL 函數概述

SQL 函數概述 SQL 函數可以分為幾大類&#xff0c;不同數據庫系統可能有略微不同的實現。以下是主要的 SQL 函數分類&#xff1a; 1. 聚合函數 (Aggregate Functions) COUNT() - 計算行數 SUM() - 計算總和 AVG() - 計算平均值 MIN() - 找最小值 MAX() - 找最大值 GROUP…

MySQL學習筆記九

第十一章使用數據處理函數 11.1函數 SQL支持函數來處理數據但是函數的可移植性沒有SQL強。 11.2使用函數 11.2.1文本處理函數 輸入&#xff1a; SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; 輸出&#xff1a; 說明&#…

認識vue中的install和使用場景

寫在前面 install 在實際開發中如果你只是一個簡單的業務實現者&#xff0c;那么大部分時間你是用不到install的&#xff0c;因為你用到的基本上都是別人封裝好的插件、組件、方法、指令等等&#xff0c;但是如果你需要給公司的架構做建設&#xff0c;install就是你避不開的一個…

【SpringCloud】構建分布式系統的利器

一、引言 在當今數字化時代&#xff0c;隨著業務規模的不斷擴大和用戶量的急劇增長&#xff0c;單體應用逐漸暴露出諸多局限性&#xff0c;如可擴展性差、維護困難等。分布式系統應運而生&#xff0c;而 Spring Cloud 則成為了構建分布式系統的熱門框架之一。它提供了一系列豐…

mkdir通配符詳解

在 mkdir 命令中使用通配符可以簡化批量創建目錄的操作。通配符如 {} 和 * 可以用來生成多個目錄名稱&#xff0c;從而減少重復輸入。以下是一些常見的使用方法和示例。 使用 {} 通配符 {} 通配符可以用來生成一系列的目錄名稱&#xff0c;語法如下&#xff1a; mkdir dir_{…

Transformer的Word Embedding

一、Transformer 中的詞嵌入是什么&#xff1f; 1. 定義與作用 ? 詞嵌入&#xff08;Word Embedding&#xff09;&#xff1a;將離散的詞語映射為低維連續向量&#xff0c;捕捉語義和語法信息。 ? 在 Transformer 中的位置&#xff1a; ? 輸入層&#xff1a;每個詞通過嵌入…

Linux 進程間通信:信號機制

Linux 進程間通信&#xff1a;信號機制 在多進程操作系統中&#xff0c;進程之間的通信至關重要&#xff0c;尤其是在Linux系統中&#xff0c;信號&#xff08;Signal&#xff09;作為一種特殊的進程間通信方式&#xff0c;廣泛用于進程之間的協調和控制。信號可以看作是操作系…

基于TRIZ創新方法論的九屏法分析系統

1. 文件頭與庫導入 # -*- coding: utf-8 -*- import streamlit as st import pandas as pd import numpy as np import plotly.graph_objects as go from datetime import datetime from sklearn.ensemble import RandomForestRegressor ??作用??&#xff1a;設置文件編碼…

【LangChain框架組成】 LangChain 技術棧的模塊化架構解析

目錄 整體架構概述 整體架構層級劃分 模塊詳細解析 1. 部署與服務層&#xff08;LangServe & Deployments&#xff09; 2. 應用模板層&#xff08;Templates & Committee Architectures&#xff09; 3. 核心功能層&#xff08;LangChain&#xff09; 4. 社區擴展…

自定義數據結構的QVariant序列化 ASSERT failure in QVariant::save: “invalid type to save“

自定義數據結構放入QVariant&#xff0c;在序列化時拋出異常 ASSERT failure in QVariant::save: “invalid type to save” 自定義數據結構如struct MyData&#xff0c;除了要在結構體后面加 struct MyData { ... } Q_DECLARE_METATYPE(MyData)如果需要用到流的輸入輸出&…

vxe-table 啟用 checkbox-config.reserve 實現分頁復選框選擇功能、獲取已選數據的用法

vxe-table 啟用 checkbox-config.reserve 實現分頁復選框選擇功能、獲取已選數據的用法 查看官網&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.com/x-extends/vxe-table gitee&#xff1a;https://gitee.com/x-extends/vxe-table 效果 代碼 獲取已選擇…

藍橋杯-門牌制作

題目描述 本題為填空題&#xff0c;只需要算出結果后&#xff0c;在代碼中使用輸出語句將所填結果輸出即可。 小藍要為一條街的住戶制作門牌號。 這條街一共有 20202020 位住戶&#xff0c;門牌號從 11 到 20202020 編號。 小藍制作門牌的方法是先制作 00 到 99 這幾個數字…

C#調用Lua方法1+C#調用Lua方法2,3

xLua中Lua調用C#代碼 原因&#xff1a;C#實現的系統&#xff0c;因為Lua可以調用&#xff0c;所以完全可以換成Lua實現&#xff0c;因為Lua可以即時更改&#xff0c;即時運行&#xff0c;所以游戲的代碼邏輯就可以隨時更改。 實現和C#相同效果的系統&#xff0c;如何實現&#…

macOS Chrome - 打開開發者工具,設置 Local storage

文章目錄 macOS Chrome - 打開開發者工具設置 Local storage macOS Chrome - 打開開發者工具 方式2&#xff1a;右鍵點擊網頁&#xff0c;選擇 檢查 設置 Local storage 選擇要設置的 url&#xff0c;顯示右側面板 雙擊面板&#xff0c;輸入要添加的內容 2025-04-08&#xff…

zustand 源碼解析

文章目錄 實現原理createcreateStore 創建實例CreateStoreImpl 實現發布訂閱createImpl 包裝返回給用戶調用的 hookuseSyncExternalStoreWithSelector 訂閱更新zustand 性能優化自定義數據更新createWithEqualityFncreateWithEqualityFnImpl 返回 hookuseSyncExternalStoreWith…

kotlin,Android,jetpack compose,日期時間設置

AI生成&#xff0c;調試出來學習&#xff0c;這些小組件會用了&#xff0c;就可以組合一個大點的程序了。 package com.example.mydatetimeimport android.app.AlertDialog import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.co…

構建k8s下Helm私有倉庫與自定義Chart開發指南

#作者&#xff1a;程宏斌 文章目錄 自定義helm模板1、開發自己的chare包2、調試chart3、安裝chart 自定義helm模板 https://hub.helm.sh/ 1、開發自己的chare包 [rootmaster ~]# helm create mychare //創建一個名為mychare的chare包 [rootmaster ~]# tree -C mychare/ //以…

MOP數據庫中的EXPLAIN用法

EXPLAIN 是 SQL 中的一個非常有用的工具&#xff0c;主要用于分析查詢語句的執行計劃。執行計劃能展示數據庫在執行查詢時的具體操作步驟&#xff0c;像表的讀取順序、使用的索引情況、數據的訪問方式等&#xff0c;這有助于我們對查詢性能進行優化。 語法 不同的數據庫系統&…

項目范圍蔓延的十大誘因及應對策略

項目范圍蔓延的十大誘因及應對策略是什么&#xff1f;主要在于&#xff1a; 缺乏清晰目標、利益相關方過多、需求變更未及時管控、缺少優先級體系、溝通鏈條冗長、管理層干預頻繁、資源與預算不匹配、技術風險被低估、合同或協議不完善、缺乏階段性驗收與復盤。其中缺乏清晰目標…