Ribbon负载均衡的简单使用

news/2024/7/9 23:40:42 标签: ribbon, 负载均衡, spring cloud

Ribbon负载均衡的简单使用

1.pom文件引用依赖

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NUZhmy7O-1635169391591)(/Users/a1/Library/Application Support/typora-user-images/image-20211025211959046.png)]

2.在获取RestTemplate方法中添加Ribbon的@LoadBalanced注解

在这里插入图片描述

3.仿造RandomRule自定义一个负载均衡的类

public class RandomRule extends AbstractLoadBalancerRule {

    /**
     * Randomly choose from all living servers
     */
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE")
    public Server choose(ILoadBalancer lb, Object key) {
        if (lb == null) {
            return null;
        }
        Server server = null;

        while (server == null) {
            if (Thread.interrupted()) {
                return null;
            }
            List<Server> upList = lb.getReachableServers();
            List<Server> allList = lb.getAllServers();

            int serverCount = allList.size();
            if (serverCount == 0) {
                /*
                 * No servers. End regardless of pass, because subsequent passes
                 * only get more restrictive.
                 */
                return null;
            }

            int index = chooseRandomInt(serverCount);
            server = upList.get(index);

            if (server == null) {
                /*
                 * The only time this should happen is if the server list were
                 * somehow trimmed. This is a transient condition. Retry after
                 * yielding.
                 */
                Thread.yield();
                continue;
            }

            if (server.isAlive()) {
                return (server);
            }

            // Shouldn't actually happen.. but must be transient or a bug.
            server = null;
            Thread.yield();
        }

        return server;

    }

    protected int chooseRandomInt(int serverCount) {
        return ThreadLocalRandom.current().nextInt(serverCount);
    }

	@Override
	public Server choose(Object key) {
		return choose(getLoadBalancer(), key);
	}

	@Override
	public void initWithNiwsConfig(IClientConfig clientConfig) {
		// TODO Auto-generated method stub
		
	}
}

4.在Springboot不能扫到的包自定义一个路由配置类,并把自定义的负载均衡算法类交给spring管理

@Configuration
public class RuleConfiguration {

    @Bean
    public IRule iRule(){
        return new PanRandomRule();
    }
}

在这里插入图片描述

5.在Springboot启动类中添加@RibbonClient注解

@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "springcloud.provider-dept",configuration = RuleConfiguration.class)
public class DeptConsumer_80 {

    public static void main(String[] args) {
        SpringApplication.run(DeptConsumer_80.class,args);
    }
}

注意:name的值填入的是服务提供者的实例名,configuration填入的值路由配置类的类文件
在这里插入图片描述


http://www.niftyadmin.cn/n/1031353.html

相关文章

【软件工程】概览

背景&#xff1a; 在早期的计算机发展中&#xff0c;程序设计是少数聪明人干的事&#xff0c;编写的程序随心所欲&#xff0c;这样就出现了程序质量低下等一系列问题&#xff0c;导致了“软件危机”。为了应对“软件危机”人们开始用工程化的方法来开发软件。 基础&#xff1a;…

JSP 2:jsp中的java代码

※ 如何写一个jsp页面以及在页面中如何写java代码。 jsp页面中主要写的东西分为三部分: 1. jsp的脚本元素 1.1表达式(expression) 形式:<% %>例如:<%"hello" %><%11 %><%s.getName() %> 将来翻译到java文件中的位置: _jspSer…

Eureka的基本使用

Eureka的基本使用 1.先创建eureka服务端的微服务 2.在Eureka服务端的微服务pom文件引用依赖 3.写服务端的配置 4.可以多创建几个服务端作为一个集群使用 5.在Springboot启动类加上EnableEurekaServer注解 6.以上就是Eureka服务端的基本配置了&#xff0c;接下就是Eureka客户…

【软件工程】不同阶段产生的图

【前言】 软件工程的学习&#xff0c;在各个阶段都会生成相对应的文档&#xff0c;文档中少不了的是各种各样的图&#xff0c;一张图胜过千言万语&#xff0c;图更容易被我们接受、理解。 【内容】 可行性分析 系统流程图(System Flowchart)&#xff1a;是描绘系统物理模型的传…

feign的基本使用

feign的基本使用 1.向微服务的pom引入依赖 2.创建一个接口&#xff0c;这个结构跟要远程调用的方法保持一致 3.在代理类加上FeignClient和Component注解 4.然后在要调用这个服务的微服务加上Eureka的依赖 5.在这个微服务的Springboot启动类同时加上EnableFeignClient注解 6.这…

JSP 3:jsp内对象、注释、路径

※ 在jsp页面代码中可以直接使用的对象 一共有9个内置对象可以直接使用.类型 名字PageContext pageContextHttpServletRequest requestHttpSession sessionServletContext applicationObject pageHtt…

Hystrix服务熔断

Hystrix服务熔断 1.在服务提供的微服务引入Hystrix依赖 2.在Springboot的启动类添加EnableCircuitBreaker注解 3.在controller层添加HystrixCommand注解

【Linux】删除目录及其子文件夹

习惯了使用Windows操作系统&#xff0c;从没想过删除目录及其子文件夹会出现什么问题。然而&#xff0c;在Linux中这可能会给你带来困扰。 打开终端&#xff0c;我们通过mkdir命令来创建一个目录文件&#xff0c;自然会想到使用rmdir命令来删除这个目录&#xff0c;这没有什么问…