SpringCloud学习(四、微服务访问之Ribbon、Feign)

【微服务】(四)—— Ribbon 目录 一、Ribbon概述 二、负载均衡 三、负载均衡流程 ​四、负载均衡策略 1、RoundRobinRule:​ 2、AvailabilityFilterRule​ 3、WeightedResponseTimeRule​ 4、ZoneAvoidanceRule​ 5、BestAvailableRule​ 6、RandomRule​ 7、RetryRule​ 五、代码实操 1、maven导入 2、代码方式修改 3、配置文件修改 4、饥饿加载 一、... 阅读详情

上一节,我们已经把数据微服务注册好了,并且开放了两个端口可以访问到数据微服务,8001、8002:

 

 下面我们就要访问前面注册好的这个数据微服务了!springcloud 提供了两种方式,一种是 Ribbon,一种是 Feign。

一、Ribbon

Ribbon 是使用 restTemplate 进行调用,并进行客户端负载均衡。 什么是客户端负载均衡呢? 在前面 注册数据微服务 里,注册了8001和8002两个微服务, Ribbon 会从注册中心获知这个信息,然后由 Ribbon 这个客户端自己决定是调用哪个,这个就叫做客户端负载均衡。

在上一节代码的基础上再创建子项目product-view-service-ribbon,我们要在这个子项目中调用上一节的数据微服务:

来看一下pom文件:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud</artifactId>
        <groupId>com.topmap</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>product-view-service-ribbon</artifactId>


    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>
    
</project>

实体类Product:

 private int id;
    private String name;
    private int price;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    public Product() {
         
    }
    public Product(int id, String name, int price) {
        super();
        this.id = id;
        this.name = name;
        this.price = price;
    }

Ribbon 客户端:

Ribbon 客户端, 通过 restTemplate 访问 http://PRODUCT-DATA-SERVICE/products , 而 product-data-service 既不是域名也不是ip地址,而是 数据服务在 eureka 注册中心的名称如下图:

 

注意看,这里访问的路径中只是指定了要访问的 微服务名称,但是并没有指定端口号到底是 8001, 还是 8002.

下面我们来写这个Ribbon客户端的代码:

这里我们通过 restTemplate 访问 http://PRODUCT-DATA-SERVICE/products

然后编写服务类,服务类数据从我们刚编写的 ProductClientRibbon 中获取:

然后我们再写一个controller将数据返回到web:

我们再写一个web界面来遍历并展示数据:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>products</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style>

        table {
            border-collapse:collapse;
            width:400px;
            margin:20px auto;
        }
        td,th{
            border:1px solid gray;
        }

    </style>
</head>
<body>

<div class="workingArea">
    <table>
        <thead>
        <tr>
            <th>id</th>
            <th>产品名称</th>
            <th>价格</th>
        </tr>
        </thead>
        <tbody>
        <tr th:each="p: ${ps}">
            <td th:text="${p.id}"></td>
            <td th:text="${p.name}"></td>
            <td th:text="${p.price}"></td>
        </tr>
        </tbody>
    </table>
</div>

</body>

</html>

我们再来编写这个Ribbon客户端子项目的启动类:

package com.topmap;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.NetUtil;
import cn.hutool.core.util.NumberUtil;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

import java.util.Scanner;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * @Author: MaHuadong
 * @Date: 2019/12/31 10:25
 * @Version 1.0
 */
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class ProductViewServiceRibbonApplication {
    public static void main(String[] args){
        int port = 0;
        int defaultPort = 8010;
        Future<Integer> future = ThreadUtil.execAsync(() ->{
            int p = 0;
            System.out.println("请于5秒钟内输入端口号, 推荐  8010  超过5秒将默认使用 " + defaultPort);
            Scanner scanner = new Scanner(System.in);
            while(true) {
                String strPort = scanner.nextLine();
                if(!NumberUtil.isInteger(strPort)) {
                    System.err.println("只能是数字");
                    continue;
                }
                else {
                    p = Convert.toInt(strPort);
                    scanner.close();
                    break;
                }
            }
            return p;
        });
        try{
            port=future.get(5, TimeUnit.SECONDS);
        }
        catch (InterruptedException | ExecutionException | TimeoutException e){
            port = defaultPort;
        }
        if(!NetUtil.isUsableLocalPort(port)) {
            System.err.printf("端口%d被占用了,无法启动%n", port );
            System.exit(1);
        }
        new SpringApplicationBuilder(ProductViewServiceRibbonApplication.class).properties("server.port=" + port).run(args);
    }

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

}

启动类, 注解多了个 @EnableDiscoveryClient, 表示用于发现eureka 注册中心的微服务。

还多了个 RestTemplate,就表示用 restTemplate 这个工具来做负载均衡。

最后写一下我们的配置文件yml:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: product-view-service-ribbon
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    content-type: text/html
    mode: HTML5   

配置类,指定了 eureka server 的地址,以及自己的名称。 另外是一些 thymeleaf 的默认配置。

最后我们来测试一下Ribbon客户端的作用:

先启动eurekserver服务:

再启动两次数据服务,分别选择端口8001和8002

最后再启动ribbon客户端:

 

这里多刷新几遍,会发现这个端口有时候是 8001,有时候是8002. 从而观察到访问 数据服务集群,客户端负载均衡的效果。

 

 

我们再来捋一下思路:

如图所示:
1. 首先数据微服务和视图微服务都被 eureka 管理起来了。
2. 数据服务是由两个实例的集群组成的,端口分别是 8001 , 8002
3. 视图微服务通过 注册中心调用微服务, 然后负载均衡到 8001 或者 8002 端口的应用上。

 

 这就是通过Ribbon访问微服务的方法。Ribbon 是使用 restTemplate 进行调用,并进行客户端负载均衡。

二、Feign

前面我们学习了使用Ribbon进行微服务的访问,这里我们来看一下另外一种访问微服务的方法:Feign

Feign 是对 Ribbon的封装,使用注解的方式,调用起来更简单, 也是主流的方式。

首先从代码上来看一下这两种方法的不同之处:

Ribbon方式:

public List<Product> listProdcuts() {
    return restTemplate.getForObject("http://PRODUCT-DATA-SERVICE/products",List.class);
}

这个product-data-service 既不是域名也不是ip地址,而是 数据服务在 eureka 注册中心的名称。

Feign方式:

@FeignClient(value = "PRODUCT-DATA-SERVICE")
public interface ProductClientFeign {
 
    @GetMapping("/products")
    public List<Product> listProdcuts();
}

这里可以看出Feign是使用注解的方式直接把数据微服务的注册名称传进去。

下面我们通过代码进行通过Feign访问数据微服务的过程实现!

1、新建子项目:product-view-service-feign

我们来看一下我们的pom文件:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud</artifactId>
        <groupId>com.topmap</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>product-view-service-feign</artifactId>


    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

   
</project>

这里我们又引进来了一个新的jar包:spring-cloud-starter-openfeign,就是用来支持 Feign 方式的。

2、新建实体类Product

package com.topmap.pojo;

/**
 * @Author: MaHuadong
 * @Date: 2019/12/31 11:14
 * @Version 1.0
 */
public class Product {
    private int id;
    private String name;
    private int price;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    public Product() {

    }
    public Product(int id, String name, int price) {
        super();
        this.id = id;
        this.name = name;
        this.price = price;
    }
    
}

3、Feign 客户端

Feign 客户端, 通过 注解方式 访问 访问PRODUCT-DATA-SERVICE服务的 products路径, product-data-service 既不是域名也不是ip地址,而是 数据服务在 eureka 注册中心的名称。

注意看,这里也只是通过注解指定了要访问的 微服务名称,但是并没有指定端口号到底是 8001, 还是 8002.

4、新建服务类ProductService:

服务类,数据从 productClientFeign 中获取

5、新建controller:控制器,把数据取出来放在 product.html 中

6、新建products.html遍历并展示数据微服务的数据:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>products</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style>

        table {
            border-collapse:collapse;
            width:400px;
            margin:20px auto;
        }
        td,th{
            border:1px solid gray;
        }

    </style>
</head>
<body>

<div class="workingArea">
    <table>
        <thead>
        <tr>
            <th>id</th>
            <th>产品名称</th>
            <th>价格</th>
        </tr>
        </thead>
        <tbody>
        <tr th:each="p: ${ps}">
            <td th:text="${p.id}"></td>
            <td th:text="${p.name}"></td>
            <td th:text="${p.price}"></td>
        </tr>
        </tbody>
    </table>
</div>

</body>

</html>

7、编写Feign启动类ProductViewServiceFeignApplication:

package com.topmap;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.NetUtil;
import cn.hutool.core.util.NumberUtil;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

import java.util.Scanner;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * @Author: MaHuadong
 * @Date: 2019/12/31 11:24
 * @Version 1.0
 */
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class ProductViewServiceFeignApplication {
    public static void main(String[] args){
        int port = 0;
        int defaultPort = 8012;
        Future<Integer> future = ThreadUtil.execAsync(() ->{
            int p = 0;
            System.out.println("请于5秒钟内输入端口号, 推荐  8012 、 8013  或者  8014,超过5秒将默认使用"+defaultPort);
            Scanner scanner = new Scanner(System.in);
            while(true) {
                String strPort = scanner.nextLine();
                if(!NumberUtil.isInteger(strPort)) {
                    System.err.println("只能是数字");
                    continue;
                }
                else {
                    p = Convert.toInt(strPort);
                    scanner.close();
                    break;
                }
            }
            return p;
        });
        try{
            port=future.get(5, TimeUnit.SECONDS);
        }
        catch (InterruptedException | ExecutionException | TimeoutException e){
            port = defaultPort;
        }
        if(!NetUtil.isUsableLocalPort(port)) {
            System.err.printf("端口%d被占用了,无法启动%n", port );
            System.exit(1);
        }
        new SpringApplicationBuilder(ProductViewServiceFeignApplication.class).properties("server.port=" + port).run(args);
    }
}

启动类, 这里注解多了个 @EnableFeignClients, 表示用于使用 Feign 方式。

8、最后配置文件yml

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: product-view-service-feign
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    content-type: text/html
    mode: HTML5   

配置类,指定了 eureka server 的地址,以及自己的名称。 另外是一些 thymeleaf 的默认配置。

最后我们启动Feign的启动类,然后访问地址:
http://127.0.0.1:8012/products

多刷新几遍,会发现这个端口有时候是 8001,有时候是8002. 从而观察到访问 数据服务集群,客户端负载均衡的效果。

Feign的微服务的调用过程和Ribbon是类似的如下图:

1. 首先数据微服务和视图微服务都被 eureka 管理起来了。
2. 数据服务是由两个实例的集群组成的,端口分别是 8001 , 8002
3. 视图微服务通过 注册中心调用微服务, 然后负载均衡到 8001 或者 8002 端口的应用上。

总结:因为 Feign 是对 Ribbon 的封装,而且也是主要方式,所以后续学习我们就会都使用 feign, 而不再使用 Ribbon了。

这一节就先到这儿,大家加油!

springcloud微服务全家桶实战 一、整体介绍 二、概念学习 2.1 SpringCloud 2.2 Eureka 2.3 Ribbon 2.4 Feign 2.5 Hystrix 2.6 HystrixDashbord 2.7 Config 2.8 Zuul 2.9 Sleuth ZipKin 2.10 RabbitMQ 三、实战 3.1 springboot学习补充 3.11 Springboo... 阅读详情

相关推荐

从一行接口到一次远程调用:Feign声明式代理、Ribbon负载均衡与LoadBalancer演进的源码推演

本文沿一次远程调用的生命周期,剖析Feign声明式客户端与Ribbon负载均衡的原理与演进。启动期梳理注解扫描、工厂Bean与命名子容器,调用期拆解契约解析、方法处理器与八大组件,并用两百行迷你Feign复现骨架;详解注解属性、配置优先级、三层超时与重试放大;深入负载均衡器内部、名单刷新、实例熔断黑名单、区域感知选择与七种策略,用离散事件仿真量化慢实例与宕机场景;最后讲清向LoadBalancer和HTTP Service Clients的迁移路径,并给出连接、超时、重试与均衡四类治理清单。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 168万+

【SpringCloud】微服务概念和组件学习-Eureka、Ribbon、Nacos、Feign、Gateway、RestTemplate、Docker

单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件SpringCloudRibbon的底层采用了一个拦截器,拦截了RestTemplate发出的请求,对地址做了修改。

weixin_44976643的博客 682

【SpringCloud】SpringCloud整合五大组件Eureka、Ribbon、Hystrix、Feign、Zuul

Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具,它为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。 特点 约定优于配置 适用于各种环境 隐藏了组件的复杂性,并提供声明式、无xml的配置方式 开箱即用,快速启动 轻量级的组件。SpringCloud整合的组件大多比...

像风走过八千里 3703

【微服务笔记05】微服务组件之Ribbon负载均衡器组件介绍及其使用

上一篇文章介绍了OpenFeign组件,这个组件主要是用于实现微服务之间的调用,既然微服务之间可以调用了,那么问题又来了,假设在某个时间里面,微服务A的访问请求非常多,导致微服务A无法处理过来,从而导致微服务A宕机,对于这种情况,我们应该专门避免呢???对于上面这种情况,我们可以这样解决,既然一台微服务A无法处理那么多的请求,那如果是多台微服务A应用程序呢,这样子是不是就可以将请求平均分配到不同的微服务A机器上面,从而减少某一台微服务A的请求处理量,避免服务宕机情况的出现,这里介绍的思想就是:负载均衡。

✅ Java 开发工程师 1992

11n、11ac、11ax和11be MCS表(全网最全)

1、无线协商速率介绍及计算 2、附11n、11ac、11ax 完整MCS速率表

weixin_41500064的博客 2万+

航空发动机轴承故障诊断

《航空发动机主轴承故障诊断的挑战与HIT数据集研究》 摘要: 航空发动机主轴承作为关键部件,其可靠性直接影响飞行安全。然而,主轴承故障诊断面临信号信噪比低、传输路径复杂、故障类型多样、变工况运行等挑战。哈尔滨工业大学团队开发的HIT数据集为研究提供了真实工况下的实验数据,包含正常、内圈和外圈故障三种状态,具有高仿真度和强挑战性特点。研究表明,传统诊断方法在该数据集上准确率仅71-85%,突显了诊断难度。团队提出的ISONet新方法通过输入空间过参数化技术,将诊断准确率提升至99%以上,为航空发动机轴承故障诊

tyutwuxuan的博客 994

微服务之Ribbon

Ribbon1 简介1.1 基本情况1.2 Ribbon本地负载均衡客户端VS Nginx服务端负载均衡区别1.3 Load Balance负载均衡分类1.4 工作原理2 Ribbon实现2.1 pom.xml2.2 RestTemplate的使用3 Ribbon负载规则3.1 默认的负载规则3.2 替换负载规则 Ribbon 中文官方文档→官方文档 1 简介 1.1 基本情况 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 功能:提供客户端的软

qq_41597232的博客 4084

关于光耦隔离与SP3485E芯片一起使用无法拉高485使能引脚问题

最近在做的一个项目,定制了一块STM32F407ZG的工控板,工控板载4个485接口全部都是只能接收数据,不能对外发送数据。1.接线不正确:接线不正确导致485收发出现问题。 2.程序端口初始化问题:控制光耦隔离的输入脚IO的初始化和置位状态有问题。 3.GPIO复用问题:控制对应串口的GPIO不是正点原子默认的GPIO,而是经过复用的其他IO,复用问题。 4.程序设置与485E芯片收发模式不对应:对于使能引脚的电平要根据光耦的输出情况确定输入IO与RE的关系,可能模式没有对应。 5.光耦隔离或者SP485

weixin_45862642的博客 2978

【微服务】微服务之Feign 与 Ribbon

Ribbon 是 Netflix 开源的一个客户端负载均衡器,通常与微服务架构中的服务发现机制(如 Eureka)配合使用。它负责在多个服务实例之间分配请求,从而实现负载均衡,提高系统的性能和可用性。Ribbon 作为一个客户端负载均衡器,直接在客户端对请求进行分发和管理,而不是通过中间的负载均衡器服务器。Netflix Feign 通过其简洁的声明式语法和强大的集成功能,使微服务之间的通信变得更加简单和高效。它不仅减少了开发人员的工作量,还提高了代码的可维护性和可读性。

Venus's Blog 2万+

华为CNA VRM搭建(使用vmware worfstartion搭建)

华为CNA和VRM在 vmware workstation安装使用

weixin_70595351的博客 1810

【实践指南】Wasserstein距离在电力系统鲁棒优化中的核心应用

本文深入探讨了Wasserstein距离在电力系统分布鲁棒优化中的核心应用。针对风电、光伏出力的不确定性,文章阐述了如何利用Wasserstein距离构建模糊集,将复杂的分布鲁棒优化问题转化为可求解的确定性模型,并提供了从理论到代码实现的完整实践指南,有效平衡了系统运行的经济性与鲁棒性。

weixin_29229261的博客 307

Feign、Ribbon、Hystrix

Feign 使得用 Java 写 Http 客户端更加容易,这是 Feign 的核心能力!!!Feign 将其抽象为一套通用逻辑,类似于写普通方法调用一样,Feign 做一层代理,封装这些冗余操作。feign 大致提供了这些核心能力:Feign是一款Java语言编写的HttpClient绑定器,在Spring Cloud微服务中用于实现微服务之间的声明式调用。

林在闪闪发光的博客 4818

UFS软件分区介绍

本文主要介绍了ufs软件分区管理的概况,能够使大家对软件分区有个大体的认识

肥匪斐's blogs 1万+

【SpringCloud微服务系列】SpringCloud组件原理:Eureka,Feign,Ribbon,Hystrix,Zuul

目录 1.前序 1.1 分布式的优缺点 1.1.1 分布式优点 1.1.2 分布式缺点 1.2 分布式服务框架 2.SpringCloud常用组件 2.1 Eureka 2.1.1 同为注册中心,Eureka和Zookeeper的区别: 2.2 Feign 2.3 Ribbon 2.4 Hystrix ...

Yangy的博客 1万+

【教培管家】小程序实战(五):体验课预约——从流量到转化的闭环

本节我们通过变量状态管理和数据联动,实现了孩子选择和日期选定。下一篇我们继续讲解预约页面,根据选择的日期来筛选排课,供用户进行预约。

低代码布道师的博客 1562

基于 高斯过程回归(Gaussian Process Regression, GPR) 的 时间序列区间预测 的 MATLAB 示例代码

基于 高斯过程回归(Gaussian Process Regression, GPR) 的 时间序列区间预测 的 MATLAB 示例代码

算法如诗的博客 153

【SpringCloud】SpringCloud之Ribbon及Feign介绍

文章目录前言一、负载均衡介绍1.1 集中式LB和进程内LB1.2 Ribbon本地负载均衡 VS Nginx服务端负载均衡1.3 SpringCloud整合Ribbon使用1.4 Ribbon之轮询算法原理1.5 Ribbon中进行负载规则替换二、RestTemplate介绍三、Feign和OpenFeign介绍3.1 Feign3.2 OpenFeign四、总结 前言 在上篇文章SpringCloud整合Eurea注册中心基础知识中,我们介绍了Eureka,并利用SpringCloud进行了整合,其中进行

时光、疏离了记忆づ童话的博客 1422

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Ribbon和Feign区别在哪

先说一下负载均衡:服务访问量忒大,一个服务器顶不住,服务器一崩那不凉了,怎么办——多用几个服务器,使单个服务器承受的访问量分散开,通过调度算法让他们都有休息的时间,就算有一个服务器凉了,至少还有其他的服务器顶上,不至于服务崩了。实现分散这些访问压力到不同服务器者就是负载也。 Ribbon和Feign都是实现负载均衡的组件,Feign的本质是Ribbon,基于Ribbon。 通过一个情景来说明他们的区别:微服务Service作为服务方提供操作展示数据的服务,做一个服务方的集群,以分散访问压力;微服务Cli

九 3415

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

微服务架构---Ribbon\Feign

微服务架构(2)

m0_63016075的博客 2675

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

负载均衡Ribbon和Feign---SpringCloud

负载均衡Ribbon和Feign Ribbon负载均衡(基于客户端) 6.1 负载均衡以及Ribbon Ribbon是什么? Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。 简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将 Netflix 的中间层服务连接在一起。Ribbon 的客户端组件提供一系列完整的配置项,如:连接超时、重试等。简单的说,就是在配置文件中列出 LoadBalance

Frank---7的博客 14万+

springcloud 之 Ribbon Hystrix Feign bus 动态修改配置

测试如下: Hystrix 熔断: 1、熔断器:当某个服务的失败率达到一定阈值时,Hystrix会打开熔断器,停止对该服务的调用,从而防止故障进一步扩散。熔断器开启后,Hystrix会快速失败并返回备选结果或降级数据,以提高系统的响应速度。 2、资源隔离:Hystrix可以对调用远程服务的线程池进行资源隔离,限制调用分布式服务的资源使用。这样,即使某个服务出现故障,也不会影响其他服务的调用。 3、服务降级:当服务调用失败或资源不足时,Hystrix可以进行降级处理。降级后可以配合降级接口返回托底数据,以保证

zhanglinlang的专栏 1481

【SpringCloud】Ribbon(LoadBalancer ) 和 Feign

负载均衡与Spring Cloud实现 本文介绍了负载均衡技术及其在Spring Cloud中的实现方式。主要内容包括: 负载均衡基础:通过LVS等工具调整网络吞吐量,实现峰值调用时的流量分配。 Ribbon与LoadBalancer: Ribbon作为客户端负载均衡工具,已从最新Spring Cloud版本移除 LoadBalancer是Ribbon的替代方案,使用方式类似 详细说明了LoadBalancer的配置步骤(依赖导入、注解使用等) 负载均衡实践: 展示了多服务实例(8001/8002/8003

杨DaB的博客 1026

SpringCloud Ribbon 和 Feign 的区别

spring cloud的 Netflix 中提供了两个组件实现软负载均衡调用:ribbon 和 feign 。 Ribbon 是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。 它可以 在客户端 配置 RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟http请求,步骤相当繁琐。 Feign Feign 是在 Ribbon的基...

三好市民江先生的博客 2114

Springcloud微服务调用ribbon与feign

Springcloud微服务操作 微服务的概念? 将all in one 和 soa 框架的缺点都弥补了的框架结构 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。 服务间可以通过“轻量级设备与HTTP型API进行沟通” 服务之...

weixin_43823728的博客 445

Springcloud之Feign、Hystrix、Ribbon如何设置超时时间

我们在微服务调用服务的时候,会使用hystrix、feign和ribbon,比如有一个实例发生了故障而该情况还没有被服务治理机制及时的发现和摘除,这时候客户端访问该节点的时候自然会失败。所以,为了构建更为健壮的应用系统,我们希望当请求失败的时候能够有一定策略的重试机制,而不是直接返回失败。这里还会设计一些其他的配置参数,降级和熔断的概念不再赘述。先看这几个组件的关系hystrix在最外层,然后再到Ribbon,最后里面的是http请求。所以说。

MrLee的博客 4861

SpringCloud微服务从零带你入门(一)(Eureka | Ribbon | Feign)

通过实现IRule接口可以自定义负载策略,主要的选择服务逻辑在choose方法中。通过配置的方式使用自定义的负载策略。本期分模块介绍了SpringCloud中常用的组件包括Eureka, Ribbon 以及 Feign,下期会继续进行介绍Hystrix以及API网关Zuul。

wxchyy的博客 1484
上一篇: SpringCloud学习(三、父子项目、服务注册、服务关联)
下一篇: SpringCloud学习(五、服务链路追踪----ZipKip)
MagicMHD
博客等级 码龄9年 503粉丝 78原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值