Ribbon集成Nacos实现权重配置(本篇暂未支持spring gateway)

news2024/11/15 23:28:34

1场景:本篇,是师范 ribbon 与nacos 的权重测试,ribbon读取 nacos内权重设置。

在调用端增加配置文件

代码如下:

(1) 本次测试nacos 1.4.1;

(2) spring cloud 版本:

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>Hoxton.SR1</version>

<type>pom</type>

<scope>import</scope>

(3)ribbon版本:

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-openfeign</artifactId>

<version>2.2.1.RELEASE</version>

<relativePath>..</relativePath>

package com.pooj.messager.fileHandel.config;


import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.cloud.nacos.ribbon.NacosServer;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;

@Slf4j
@Component
public class ArtisanWeightedRule extends AbstractLoadBalancerRule{

    @Resource
    private NacosDiscoveryProperties discoveryProperties;
     @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
        //读取配置文件并且初始化,ribbon内部的, 几乎用不上
    }
    @Autowired
    private NacosServiceManager nacosServiceManager;
    @Override
    public Server choose(Object key) {
        // 1.获取服务的名称
        BaseLoadBalancer loadBalancer = (BaseLoadBalancer) this.getLoadBalancer();
        String serverName = loadBalancer.getName();
        // 2.获取NameService
        NamingService namingService = nacosServiceManager.getNamingService(discoveryProperties.getNacosProperties());
        try {
            //3.此时Nacos Client会自动实现基于权重的负载均衡算法,获取健康实例
            Instance instance = namingService.selectOneHealthyInstance(serverName);
            return new NacosServer(instance);
        } catch (NacosException e) {
            log.error("获取healthy服务失败,原因是:{}", e.getErrMsg(), e);
        }
        return null;

    }
        //本地版本    discoveryProperties.namingServiceInstance() ,这个方法找不到。
        //这里的方法,网上比较通用,预估是版本问题。换成以上版本。
        /*try {
            log.info("key:{}", key);
            BaseLoadBalancer baseLoadBalancer = (BaseLoadBalancer) this.getLoadBalancer();
            log.info("baseLoadBalancer--->:{}", baseLoadBalancer);

            //获取微服务的名称
            String serviceName = baseLoadBalancer.getName();

            //获取Nacos服务发现的相关组件API,网上用这个比较多,但是这个版本内没有这个方法
            NamingService namingService = discoveryProperties.namingServiceInstance();

            //获取 一个基于nacos client 实现权重的负载均衡算法
            Instance instance = namingService.selectOneHealthyInstance(serviceName);

            //返回一个server
            return new NacosServer(instance);
        } catch (NacosException e) {
            log.error("自定义负载均衡算法错误");
        }*/


}

2调用方注意,这里没有调用网关(spring gateway),直接调用服务名称

3测试结果:服务提供方,测试例子,调用十次结果;

权重0.8 的输出

权重0.2的输出

符合测试预期结束。

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

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

相关文章

趣味三角——第2章——弦

目录 2.1 三角学的雏形与和弦表的产生 2.2 解读残缺粘土板“Plimpton 322”上的三角学 “知识来自影子&#xff0c;影子来自 磬折形(The knowledge comes from the shadow, and the shadow comes from the gnomon)” ——摘自<<Chou-pei Suan-king>>(周髀(b)算经…

while循环——求100以内偶数和

1 问题 求100以内的偶数和。 2 方法 public class EvenNumber{ public static void main(String[] args){ int i 1; int sum 0; while(i < 100){ if(i % 2 0){ System.out.println(i); sum sum i; } i; } System.out.println("100以内的偶数和为&#xff1a;"…

Java-线程基础

Java 线程详解 一个程序至少需要一个进程&#xff0c;而一个进程至少需要一个线程&#xff0c;它也被称为主线程。 线程是程序执行流的最小单位&#xff0c;而进程是系统进行资源分配和调度的一个最小单位。 在单个进程中&#xff0c;可以拥有多个并发执行的线程&#xff0c…

MYSQL分页查询时没有用ORDER BY出现数据重复的问题

背景 产品反馈&#xff0c;用户在使用分页列表时&#xff0c;出现数据重复的问题&#xff0c;查看代码后发现对应的分页SQL并没有使用order by进行排序&#xff0c;但是印象中Mysql的InnoDB引擎会默认按照主键id进行排序&#xff0c;本地测试了一下的确出现了部分数据在不同的页…

单线程事件处理器ControllerEventManager

0 前言 单线程事件处理器&#xff0c;Controller端定义的一个组件。该组件内置了一个专属线程&#xff0c;负责处理其他线程发送过来的Controller事件。还定义了一些管理方法&#xff0c;为专属线程输送待处理事件。 0.11.0.0版本前&#xff0c;Controller组件源码复杂。集群…

【Ajax】XMLHttpRequest和Level2

一、XMLHttpRequest什么是XMLHttpRequestXMLHttpRequest&#xff08;简称 xhr&#xff09;是浏览器提供的 Javascript 对象&#xff0c;通过它&#xff0c;可以请求服务器上的数据资源。之前所学的 jQuery 中的 Ajax 函数&#xff0c;就是基于 xhr 对象封装出来的。二、了解xhr…

java面试

java面试目录概述需求&#xff1a;设计思路实现思路分析1.代码&#xff1a;参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Surv…

【数据结构】保姆级队列各接口功能实现

目录 &#x1f34a;前言&#x1f34a;&#xff1a; &#x1f95d;一、队列概述&#x1f95d;&#xff1a; 1.队列的概念&#xff1a; 2.队列的结构&#xff1a; &#x1f349;二、队列的各接口功能实现&#x1f349;&#xff1a; 1.初始化队列&#xff1a; 2.入队&#…

k8s之挂载NFS到POD中

写在前面 在k8s之挂载本地磁盘到POD中 一文中我们看了如何将POD中的数据写到本地磁盘中&#xff0c;这种方式要求POD只能在指定的Node上&#xff0c;一旦POD更换Node&#xff0c;数据依然会丢失&#xff0c;所以本文看下如何通过将数据写到NFS中来解决这个问题。下面我们就开始…

sklearn数据降维之字典学习

文章目录字典学习简介构造函数实战Step1 制作实验数据Step2 小批字典学习Step 3 参数调整字典学习简介 如果把降维理解成压缩的话&#xff0c;那么字典学习的本质是编码&#xff0c;其目的是找到少量的原子&#xff0c;用以描述或构建原始样本。举个一维的例子&#xff0c;以a…

程序员护眼指南

前言 前言&#xff1a;脱发和近视是当代年轻人的两大痛点&#xff0c;今天来聊聊如何护眼。 文章目录前言一、护眼的核心二、调节睫状肌的方法1. 眨眼2. 望远3. 睡觉4. 促进血液循环5. 吃补剂6. 好的屏幕一、护眼的核心 护眼的核心就是保护睫状肌。 睫状肌是眼内的一种平滑肌…

一起自学SLAM算法:7.7 典型SLAM算法

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 针对式&#xff08;7-38&#xff09;所述的在线SLAM系统&#xff0c;以扩展卡尔曼滤波&#xff08;EKF&#xff09;为代表的滤波方法&#xff0c;是求解该状态估计问题最典型的方法&#xff0c;在7.4节中已经详细…

GY-US42超声波传感器模块介绍

GY-US42超声波传感器模块简介GY-US42 是一款低成本高品质测距传感器模块。工作电压 3-5v&#xff0c;功耗小&#xff0c;体积小&#xff0c;安装方便。其工作原理是&#xff0c;探头发射超声波&#xff0c;照射到被测物体后&#xff0c;探头接收返回声波&#xff0c;利用时间差…

学人工智能电脑主机八大件配置选择指南

来源&#xff1a;深度之眼 作者&#xff1a;frank 编辑&#xff1a;学姐 本篇主要是帮助大家构建高性能、高性价比的AI开发的硬件平台。如何不把钱浪费到不必要的硬件上&#xff0c;并合理搭配硬件配置节省预算是本文想要去讨论的问题。如果预算充足&#xff0c;笔者建议购买一…

【JavaSE专栏1】Java的介绍、特点和历史

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

Python ·保险理赔分析:数据分析

介绍 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 在本笔记本中&#xff0c;我们将仔细研究保险索赔&#xff0c;并弄清一些有关血压、BMI、糖尿病、吸烟、年龄和性别等条件如何影响索赔价值的事实。 我们将使用散点图、饼图、直…

IDEA必装插件-Gyro

前言用SpringBootTest运行单测的时候&#xff0c;是不是每运行都需要重新启动Spring容器&#xff1f;大型应用启动一次会浪费大量的时间&#xff0c;导致效率比较低。Gyro插件可以解决你的问题。Gyro介绍它是一个IDEA插件&#xff0c;安装之后&#xff0c;用Gyro Debug运行你的…

一起自学SLAM算法:7.4 基于贝叶斯网络的状态估计

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 在7.2.4节中&#xff0c;讨论了表示机器人观测与运动之间依赖关系的概率图模型&#xff0c;主要是贝叶斯网络&#xff08;实际应用在机器人中的是动态贝叶斯网络&#xff09;和马尔可夫网络&#xff08;实际应用…

fpga实操训练(lcd字符显示)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 用fpga编写屏幕显示,和c语言编写有很大的不同。用c语言开发,很大程度上是遵循soc ip提供的规范进行编写。而用fpga开发的话,则需要考虑不同信号的时序关系。但是,用fpga开发也有…

c++ 优先级队列priority_queue的使用

c priority_queue是对其他容器元素顺序的调整包装; 堆的原理 1.定义 priority_queue<Type, Container, Functional> q; 其中&#xff0c;Type是数据类型&#xff0c;Container是低层容器&#xff0c;如vector, stack, deque等. Functional是比较函数&#xff1b;默认可…