SpringCloudGateway路由策略:Nacos同集群优先

2023-11-19

使用版本

<spring-boot.version>2.7.3</spring-boot.version>
<spring-cloud.version>2021.0.4</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version>
注:2021.x版与2.2.x版实现方式有差异,本文档使用2021.x版。附录含相关版本说明

步骤:

1.修改网关、业务模块等配置文件,指定nacos服务集群名

spring:
  cloud:
    nacos:
      discovery:
        cluster-name: MyClusterName

2.gateway模块指定LoadBalancer实现NacosLoadBalancerClientConfiguration

@LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class)
public class LoadBalancerConfig {
}

同集群优先实现方式参见源码:

类:com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancer

private Response<ServiceInstance> getInstanceResponse(
			List<ServiceInstance> serviceInstances) {
		if (serviceInstances.isEmpty()) {
			log.warn("No servers available for service: " + this.serviceId);
			return new EmptyResponse();
		}

		try {
			String clusterName = this.nacosDiscoveryProperties.getClusterName();

			List<ServiceInstance> instancesToChoose = serviceInstances;
			if (StringUtils.isNotBlank(clusterName)) {
				List<ServiceInstance> sameClusterInstances = serviceInstances.stream()
						.filter(serviceInstance -> {
							String cluster = serviceInstance.getMetadata()
									.get("nacos.cluster");
							return StringUtils.equals(cluster, clusterName);
						}).collect(Collectors.toList());
				if (!CollectionUtils.isEmpty(sameClusterInstances)) {
					instancesToChoose = sameClusterInstances;
				}
			}
			else {
				log.warn(
						"A cross-cluster call occurs,name = {}, clusterName = {}, instance = {}",
						serviceId, clusterName, serviceInstances);
			}

			ServiceInstance instance = NacosBalancer
					.getHostByRandomWeight3(instancesToChoose);

			return new DefaultResponse(instance);
		}
		catch (Exception e) {
			log.warn("NacosLoadBalancer error", e);
			return null;
		}

	}

附录:

资料链接

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringCloudGateway路由策略:Nacos同集群优先 的相关文章

  • 为什么 Hashtable 不允许空键或空值?

    正如 JDK 文档中所指定的 Hashtable 不允许空键或空值 HashMap 允许一个空键和任意数量的空值 为什么是这样 Hashtable 是较旧的类 通常不鼓励使用它 也许他们看到了对 null 键的需要 更重要的是 null 值
  • 使用 TLS PSK 加密时如何正确检测流结束?

    我已经准备好了一个简单的 TLS PSK 客户端测试用例 https github com afarber jetty newbie tree master TlsPskClient2 src main java de afarber tl
  • openFileOutput 在单例类中无法正常工作 - 想法/解决方法?

    作为一名 Android 开发新手 我遇到了一些奇怪的问题 我想创建一个类 它方法其他类 活动 任何可以用于以某种特殊方式处理文件的类 假设为了简单起见 我们将记录一些内容 如果我在活动中执行以下操作 例如在 OnClick 侦听器中 则一
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 当我们使用赋值而不是比较时,如何评估 if/while 条件?

    我在学习 Java 的 OCA OCP 时发现了这个令人惊讶的事情 下面是第一段代码 其中 if 测试条件 部分 让我惊讶 public class BooleanIf public static void main String args
  • Spring 从 JBoss 上下文加载 PropertySourcesPlaceholderConfigurer

    我有一个使用 PropertySourcesPlaceholderConfigurer 的 spring 3 1 应用程序加载设置 我想管理测试和生产环境 只需从服务器上下文加载设置覆盖本地文件属性中指定的设置 下一个示例在 Tomcat
  • 在 doxygen 中使用 @see 或 @link

    我之前用 Javadoc 记录并使用了标签 see link or see foo and link foo 在我的描述中链接到其他课程 现在我尝试了doxygen 似乎这些标签不兼容 如果我运行 doxygen 完整的标签将被简单地解释为
  • 我的 Kafka 流应用程序刚刚退出,代码为 0,什么也不做

    为了尝试 Kafka 流 我这样做了 public static void main String args final StreamsBuilder builder new StreamsBuilder final Properties
  • java彩色滚动条搜索结果

    我将如何在 Java 中自定义滚动条 以便我可以进行像 chrome 一样的搜索 也就是说在结果所在的位置放置彩色条纹 我不想要一个库 因为我更喜欢自己编写代码 另外 我不想失去我拥有的 L F 欢迎举例 实际上 它将查看一个大的文本文件或
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • BigDecimal汇总统计

    我有一个 BigDecimal 列表 List
  • 在约束验证器中使用 Guice 进行依赖注入

    我有一个在 ConstraintValidator 的实现中注入类的用例 我正在使用 Google guice 进行依赖项注入 目前无法在验证器内注入 我的场景的简化形式 内部模块 Provides Singleton public Ser
  • 为 REST API 生成 Swagger UI 文档

    我使用 Java 中的 JAX RS Jersey 开发了 REST API 我想为其转换 生成基于 Swagger 的 UI 文档 谁能以简单的方式告诉我如何做到这一点的精确 步骤 很抱歉 他们网站上给出的步骤对我来说有点模糊 有多种方法
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • 线程数组?

    所以我在理解如何避免线程的顺序执行时遇到了问题 我试图创建一个线程数组并在单独的循环中执行 start 和 join 函数 这是我现在拥有的代码示例 private static int w static class wThreads im
  • 难以理解 通配符

    我有一个非常基本的问题 下面的代码无法编译 假设 Apple Extends Fruit List
  • 用于生成 ISO 文件的 Maven 插件

    有没有可以生成ISO镜像的maven插件 我需要获取一些模块的输出 主要是包含 jar 的 zip 文件 并将它们组合成一个 ISO 映像 Thanks 现在有一个 ISO9660 maven 插件可以完成这项工作 https github
  • FetchType.LAZY 不适用于休眠中的 @ManyToOne 映射

    简而言之 我的 Child 类与 Parent 类之间存在多对一的关系 我想加载所有的孩子 而不必加载他们的父母详细信息 我的孩子班级是 Entity public class Child implements Serializable I
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所

随机推荐

  • 端口介绍

    文章来源 https m toutiaocdn com group 6680437870504706572 app news article timestamp 1563010542 req id 201907131735410100230
  • Linux lvm管理讲解及命令

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 树高千尺 落叶归根人生不易 人间真情 前言 目录 一 lvm管理 1 Logical
  • mysql sql优化方法_一个MySql Sql 优化技巧分享

    有天发现一个带inner join的sql 执行速度虽然不是很慢 0 1 0 2 但是没有达到理想速度 两个表关联 且关联的字段都是主键 查询的字段是唯一索引 sql如下 SELECTp item token p item product
  • 如何在小程序实现人脸识别的方法

    1 获取用户授权 在小程序中实现人脸识别需要先获取用户的授权 用户需要允许小程序访问他们的摄像头和图像数据 这样才能进行人脸识别 2 采集图像数据 在获得用户授权后 小程序可以通过摄像头或者相册功能 采集用户的面部图像数据 3 使用图像处理
  • Java-private构造方法

    private 构造函数一般用于Singleton模式 指的是整个应用只有本类的一个对象 一般这种类都有一个类似getInstance 的方法 class A public String name 构造函数限定为private 不可以直接创
  • 标准差(Standard Deviation), 标准误差(Standard error),变异系数 (Coefficient of Variance )的区别与联系

    标准差 Standard Deviation 中文环境中又常称均方差 是离均差平方的算术平均数的平方根 用 表示 标准差是方差的算术平方根 标准差能反映一个数据集的离散程度 平均数相同的两组数据 标准差未必相同 标准误差 Standard
  • 学习Flask之Flask-Login 用户会话管理

    Flask Login 用户控制用户会话管理 简单点说 就是控制登录 如果是自己写的登录系统 一般都是通过操作session 然后后台根据session 来判断权限 Flask Login 就是负责这部分 直接开始 安装 pip insta
  • System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本

    同学的电脑连接实验室的服务器时出现 System Data OracleClient 需要 Oracle 客户端软件 version 8 1 7 或更高版本 而我自己的电脑可以轻松连接服务器的数据库 首先 实验室用的是Oracle 12c
  • 力扣 942. 增减字符串匹配 双指针解法C++

    给定只含 I 增大 或 D 减小 的字符串 S 令 N S length 返回 0 1 N 的任意排列 A 使得对于所有 i 0 N 1 都有 如果 S i I 那么 A i lt A i 1 如果 S i D 那么 A i gt A i
  • TensorRT(11):python版本序列化保存与加载模型

    TensorRT系列传送门 不定期更新 深度框架 TensorRT 文章目录 一 序列化保存模型 二 反序列化加载模型 三 完整代码 楼主曾经在TensorRT 7 python版本使用入门一文中简要记录了python版本是序列化与反序列化
  • 成为编程高手的二十二条军规

    1 大学生活丰富多彩 会令你一生都难忘 但难忘有很多种 你可以学了很多东西而难忘 也会因为什么都没学到而难忘 2 计算机专业是一个很枯燥的专业 但即来之 则安之 只要你努力学 也会发现其中的乐趣的 3 记住 万丈高楼平地起 基础很重要 尤其
  • 数据挖掘:数据(数据对象与属性类型)

    一 概述 现实中的数据一般有噪声 数量庞大并且可能来自异种数据源 数据集由数据对象组成 一个数据对象代表一个实体 数据对象 又称样本 实例 数据点或对象 数据对象以数据元组的形式存放在数据库中 数据库的行对应于数据对象 列对应于属性 属性是
  • WIN10下怎么找到MYSQL数据库中存储数据的位置。

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net qq 36098284 article details 79841920 今天我想找到
  • C++中Template的用法

    模板 Template 指C 程序设计设计语言中采用类型作为参数的程序设计 支持通用程序设计 C 的标准库提供许多有用的函数大多结合了模板的观念 如STL以及IO Stream 函数模板 函数模板定义一族函数 template1 cpp i
  • LDSC:连锁不平衡回归分析

    欢迎关注 生信修炼手册 LDSC全称如下 linkage disequilibrium score regression 简称LDSR或者LDSC 在维基百科中 对该技术进行了简单介绍 通过GWAS分析可以识别到与表型相关的SNP位点 然而
  • Kettle同步表数据null处理

    kettle同步数据时会将空字符串 自动转换为 null 如果表字段非空则会报错 解决方案如下 方案一 kettle菜单栏 编辑 编辑kettle properties文件 配置项 KETTLE EMPTY STRING DIFFERS F
  • 制作及运行 WebUI(NovelAI)Docker 镜像

    准备 Novel AI 模型文件 下载地址 magnet xt urn btih 5bde442da86265b670a3e5ea3163afad2c6f8ecc 只需要部分下载其中的文件 必须的文件 文件 stableckpt anime
  • Node.js知识点详解(一)基础部分

    模块 Node js 提供了exports 和 require 两个对象 其中 exports 是模块公开的接口 require 用于从外部获取一个模块的接口 即所获取模块的 exports 对象 接下来我们就来创建hello js文件 代
  • AI圈最新深度学习量化算法!

    文章摘自AAAI21 译者 一元 量化交易和投资决策是复杂的金融任务 依赖于准确的股票选择 目前深度学习学习的策略使用于股票的问题的方案面临两个重大局限 他们不直接优化利润方面的投资目标 将每只股票视为独立于其他股票 忽略了相关股票之间的丰
  • SpringCloudGateway路由策略:Nacos同集群优先

    使用版本