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

2022年全球市场微波等离子体CVD反应器总体规模、主要生产商、主要地区、产品和应用细分研究报告

据GIR (Global Info Research)调研,按收入计,2021年全球微波等离子体CVD反应器收入大约 百万美元,预计2028年达到 百万美元,2022至2028期间,年复合增长率CAGR为 %。

MARKETRESEARCH的博客 1137

香橙派R1 Plus LTS变身无线AP/客户端:手把手教你用RTL8811CU和MT7601U网卡刷OpenWRT

本文详细介绍了如何将香橙派R1 Plus LTS开发板通过RTL8811CU和MT7601U两款USB无线网卡刷入OpenWRT系统,实现无线AP热点发射与客户端接入的双重功能。从硬件选型、驱动安装到双网卡协同配置,提供完整的实战指南,帮助用户快速搭建稳定高效的无线网络解决方案。

weixin_30919429的博客 408

微服务之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

ESP32开发环境避坑指南:用Thonny烧录MicroPython固件时常见的5个错误及解决方法

本文针对ESP32开发新手,详细解析了使用Thonny IDE烧录MicroPython固件时最常见的5个错误及其解决方案。内容涵盖驱动安装、端口识别、固件烧录失败、版本兼容性、连接不稳定以及文件系统操作异常等核心痛点,并提供硬件层面的深度排查指南,帮助开发者高效搭建稳定的ESP32开发环境。

weixin_29189003的博客 407

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

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

Venus's Blog 2万+

主流 AI 插件 之一的 Copilot 介绍

Copilot 是微软推出的一款人工智能助手,旨在通过自然语言交互帮助您提升工作效率和创造力,覆盖多平台,提供智能问答、内容生成、代码辅助等功能。其核心定位为“日常 AI 伴侣”,旨在通过自然语言交互提升工作与生活效率。

u014695938的博客 6883

SPD-Conv+YOLOv8:空间深度转换卷积赋能小目标检测,从原理到实战的科研级优化指南

从理解SPD-Conv“空间到深度+逐步卷积”的核心设计,到亲手将其嵌入YOLOv8并验证在小目标场景的表现,再到基于此探索属于自己的科研与工程方向——这个过程能让你深刻理解“小目标特征保留”在检测任务中的核心价值。现在就开始行动,相信你会在小目标检测的“细节捕捉”之路上,走出一条属于自己的技术路径。实验通常会证明:嵌入SPD-Conv后,YOLOv8在小目标AP上提升5-8个百分点,mAP50-95提升3-5个百分点,而推理速度仅下降5%以内,充分体现了其“保细节+提精度”的优势。

m0_64661770的博客 161

Feign、Ribbon、Hystrix

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

林在闪闪发光的博客 4818

uniapp - 微信授权登录报错 errMsg“:“login:fail send“ | “code“:-100 | “innerCode“:-6,解决uni-app调用微信登录时没有响应且返回错误

uni-app,微信登录,微信登录报错,微信小程序,支付宝小程序,安卓app,苹果ios,nvue,H5网页网站,uniapp苹果安卓app,微信授权登录,uniAppAPP端微信登录报错,微信确认登录界面后点击登录报错,"errMsg":"login:failsend","errCode":-100,"code":-100,"innerCode":-6,都配置好了还是报错怎么办,uniapp微信授权登录报错,UniApph5对接微信登录出现错误,appid,应用签名,微信登陆,code:-100

🏆 前端领域优质创作者 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万+

【DaVinci Configurator专题】-2-将CAN 2.0或CANFD Matrix的Arxml/DBC文件导入到CFG

共9页 目录 1 打开DaVinci Configurator,导入Arxml文件 2 解决导入Arxml文件后可能会出现的一些错误 3 验证CFG的配置 4 根据CFG的配置生成代码 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: Open the Input Files Assistant Complete update process Update ECU configurati

「汽车电子助手」的博客 6125

黑猫带你学UFS协议第12篇:UFS标志(Flags)和属性(Atrributes)详解

UFS中的标志其实就是一些开关,布尔型,非0即1,打开或者关闭。这些标志可以用来使能或者禁止UFS设备的一些功能、模式或者状态。 简单来说,flag和attribute、discriptor一样,都是ufs的寄存器罢了。只不过spec将这些寄存器分类了,分成这三种大的类型了而已。 标志可以被清除、复位、设置、触发、读。 主机也是通过设备管理器的Query Request UPIU来读取或者写标志。

黑猫奥利奥的博客 2083

【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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Ribbon和Feign区别在哪

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

九 3415

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

微服务架构---Ribbon\Feign

微服务架构(2)

m0_63016075的博客 2675

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

负载均衡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、付费专栏及课程。

余额充值