spring cloud 集成 ribbon负载均衡的实例代码

 更新时间:2021年11月30日 16:55:42   作者:张童瑶  
spring Cloud Ribbon 是一个客户端的负载均衡器,它提供对大量的HTTP和TCP客户端的访问控制。本文给大家介绍spring cloud 集成 ribbon负载均衡,感兴趣的朋友跟随小编一起看看吧

本文比较简单集成ribbon,如需要更详细,请查看我的更多博客内容。

首先创建两个服务提供者

在这里插入图片描述

服务一,集成的nacos注册中心,这块随便写一个同名接口

在这里插入图片描述

端口配置8301

在这里插入图片描述

服务二,同名接口内容修改,其他跟上一个服务一大体内容一致

在这里插入图片描述

端口配置成8302

在这里插入图片描述

创建服务消费者

在这里插入图片描述

RibbonConfig.java

package com.example.nacosribbonconsumers.config;

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

@Configuration
// 如果多个服务可以选择不同的策略
/*@RibbonClients({
        @RibbonClient(name = "other",configuration = OtherConfig.class),
        @RibbonClient(name = "provider",configuration = ProviderConfig.class)
})*/
@RibbonClient(name = "nacos-ribbon-provider")
public class RibbonConfig {

    //定义负载均衡规则
    @Bean
    public IRule ribbonRule(){
        return new RoundRobinRule();

        /**
         * RoundRobinRule:
         *  轮询规则
         *
         * RandomRule:
         *  随机规则
         *
         * WeightedResponseTimeRule:
         *  使用响应时间的平均或者百分比为每个服务分配权重的规则,如果没法收集响应时间信息,会默认使用轮询规则
         *
         * BestAvailableRule:
         *  会先根据断路器过滤掉处于故障的服务,然后选择并发量最小的服务
         *
         * ZoneAvoidanceRule:
         *  根据server所在Zone和其性能,选择服务器,默认规则
         *
         * AvailabilityFilteringRule:
         *  先根据断路器规则过滤掉有问题的服务,然后对剩余的服务按照轮询的策略进行访问
         *
         * RetryRule:
         *  先按照RoundRobinRule规则进行服务获取,如果调用服务失败会在指定时间内进行重试,直到获取到可用的服务。
         */
    }

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

}

RibbonTest.java

package com.example.nacosribbonconsumers.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class RibbonTest {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/ribbon-consumers/ribbon-test")
    public String printProviderLog(){
        String result = restTemplate.getForObject("http://nacos-ribbon-provider/ribbon-test", String.class);
        return result;
    }

}

pom包

<dependency>
	<groupId>org.springframework.cloud</groupId>	
	<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

配置文件

在这里插入图片描述

先启动两个服务提供者,然后在启动服务消费者,浏览访问

在这里插入图片描述
在这里插入图片描述

不断刷新 发现使用的轮询方式交替执行。

到此这篇关于spring cloud 集成 ribbon负载均衡的文章就介绍到这了,更多相关spring cloud ribbon负载均衡内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于springboot redirect重定向路径问题总结

    基于springboot redirect重定向路径问题总结

    这篇文章主要介绍了springboot redirect重定向路径问题总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java获取微信accessToken的方法

    java获取微信accessToken的方法

    这篇文章主要为大家详细介绍了java获取微信accessToken的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • JAVA复制数组和重置数组大小操作

    JAVA复制数组和重置数组大小操作

    这篇文章主要介绍了JAVA复制数组和重置数组大小操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java编程中ArrayList源码分析

    Java编程中ArrayList源码分析

    这篇文章主要介绍了Java编程中ArrayList源码分析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java 实战范例之精美网上音乐平台的实现

    Java 实战范例之精美网上音乐平台的实现

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+vue+Springboot+ssm+mysql+maven+redis实现一个前后端分离的精美网上音乐平台,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Java如何利用递归计算出阶乘

    Java如何利用递归计算出阶乘

    这篇文章主要介绍了Java如何通过递归计算出阶乘,文中介绍了递归的使用方法和基本特点,以及相关示例代码,对大家的学习有一定的帮助,需要的朋友可以参考下
    2023-05-05
  • 一文带你彻底剖析Java中Synchronized原理

    一文带你彻底剖析Java中Synchronized原理

    Synchronized是Java中的隐式锁,它的获取锁和释放锁都是隐式的,完全交由JVM帮助我们操作,在了解Synchronized关键字之前,首先要学习的知识点就是Java的对象结构,本文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Java 面向对象和封装全面梳理总结

    Java 面向对象和封装全面梳理总结

    面向对象乃是Java语言的核心,是程序设计的思想,在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
    2021-10-10
  • java的各种集合为什么不安全(List、Set、Map)以及代替方案

    java的各种集合为什么不安全(List、Set、Map)以及代替方案

    这篇文章主要介绍了java的各种集合为什么不安全(List、Set、Map)以及代替方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java中HashMap与String字符串互转的问题解决

    Java中HashMap与String字符串互转的问题解决

    本文介绍了Java中HashMap与String字符串互转的问题解决,当我们有需求将HashMap转为Json格式的String时,需要使用FastJson/Gson将HashMap转为String,感兴趣的可以了解一下
    2022-03-03

最新评论