Springcloud学习(三)——Feign

一、搭建项目

  1、创建feign-consumer模块

  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-demo</artifactId>
        <groupId>com.badcat</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.badcat</groupId>
    <artifactId>feign-consumer</artifactId>
    <packaging>jar</packaging>
    <name>feign-consumer</name>

    <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.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

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

</project>

  application.properties

spring.application.name=feign-consumer
server.port=40001

eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/

# 每隔5秒钟,向服务注册中心发送一条续约指令
eureka.instance.lease-renewal-interval-in-seconds=5

# 如果30秒依然没有收到续约请求,判定服务过期
eureka.instance.lease-expiration-duration-in-seconds=30

  启动类(注意@EnableFeignClients)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author badcat
 * @date 2020-04-12 11:58
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignConsumerApplication {

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

}

  创建IService接口(注意@FeignClient("eureka-client")),这个用来对接要调用的服务(集群),所以我调用IService接口的某个方法,就是在调用eureka-client服务的对应接口。

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @author badcat
 * @date 2020-04-12 12:00
 */
@FeignClient("eureka-client")
public interface IService {

    /**
     * 此处指定调用eureka-client的哪个接口
     * @return
     */
    @GetMapping("/sayHi")
    String sayHi();

}

  controller

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

/**
 * @author badcat
 * @date 2020-04-12 12:03
 */
@RestController
public class Controller {

    @Autowired
    private IService iService;

    @GetMapping("/sayHi")
    public String sayHi(){
        return this.iService.sayHi();
    }

}

  启动eureka-server、eureka-client、eureka-client2、eureka-client3、feign-consumer,尝试通过feign-consumer调用eureka-client的接口。注册中心页面如下

      

  调用结果如下,会发现feign的负载均衡默认时使用的ribbon的轮询策略。

  因为feign是依赖ribbon的,我们修改一下ribbon的负载均衡策略,试一下改成随机,配置文件添加

#针对eureka-client服务集群的负载均衡策略的配置
eureka-client.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

  启动相应模块,调用接口,发现已经是随机的了,不上截图了。

  2、重试和超时策略

  在feign-consumer的配置文件中添加如下配置,所以它的最大超时时间时(1000+2000)*(1+2)*(1+2)等于 2.7秒

# 每台机器最大的重试次数
feign-client.ribbon.MaxAutoRetries=2

# 可以再重试几台机器
feign-client.ribbon.MaxAutoRetriesNextServer=2

# 连接超时时间,单位毫秒
feign-client.ribbon.ConnectTimeout=1000

# 业务处理超时,单位毫秒
feign-client.ribbon.ReadTimeout=2000

# 在所有HTTP Method进行重试,默认false
feign-client.ribbon.OkToRetryOnAllOperations=true

  

原文地址:https://www.cnblogs.com/hmxs/p/12685789.html

时间: 2024-10-08 22:33:16

Springcloud学习(三)——Feign的相关文章

SpringCloud学习之feign

一.关于feigin feigin是一种模板化,声明式的http客户端,feign可以通过注解绑定到接口上来简化Http请求访问.当然我们也可以在创建Feign对象时定制自定义解码器(xml或者json等格式解析)和错误处理. 二.添加SpringCloud对feign的支持 gradle配置: compile('org.springframework.cloud:spring-cloud-starter-feign') feigin最基本使用方法: 1 interface GitHub { 2

SpringCloud学习系列-Feign负载均衡(2)

Feign使用步骤 1.参考microservicecloud-consumer-dept-80   新建microservicecloud-consumer-dept-feign 修改主启动类名字DeptConsumer80_Feign_App 2.microservicecloud-consumer-dept-feign工程pom.xml修改,主要添加对feign的支持 <dependency> <groupId>org.springframework.cloud</gr

SpringCloud学习(5)——Feign负载均衡

Feign概述 Feign是声明式的Web服务客户端, 使得编写Web服务客户端变的非常容易, 只需要创建一个接口, 然后在上面添加注解即可. Feign旨在使编写Java Http客户端变的更容易. 在使用Ribbon+RestTemplate时, 利用RestTemplate对http请求的封装处理, 形成了一套模板化的调用方法.但是在实际开发中, 由于对服务依赖的调用可能不止一处, 往往一个接口会被多出调用, 所以通常都会针对每个微服务自行封装一些客户端类来包装这些以来服务的调用.所以Fe

SpringCloud学习之Ribbon

一.负载均衡与Ribbon 负载均衡,在集群中是很常见的一个“名词”,顾名思义是根据一定的算法将请求分摊至对应的服务节点上,常见的算法有如下几种: 轮询法:所有请求被依次分发到每台应用服务器上,每台服务器需要处理的请求数目都相同,适合所有服务器硬件都相同的场景 随机法:请求被随机分配到各个应用服务器,在许多场合下,这种方案都很简单实用. 源地址哈希(Hash)法:将请求来源的IP地址进行Hash计算,得到对应的服务器,这样来自同一个IP的请求总在同一个服务器上处理 加权法:根据应用服务器配置的情

SpringCloud学习系列之三----- 断路器Hystrix和断路器监控Dashboar

前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netflix创建了一个名为Hystrix的库,它实现了断路器模式.主要的目的是为了解决服务雪崩效应的一个组件,是保护服务高可用的最后一道防线. 开发准备 开发环境 JDK:1.8 SpringBoot:2.1.1.RELEASE SpringCloud:Finchley 注:不一定非要用上述的版本,可以根据

SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由网关的过滤器Filter以及异常处理的教程. SpringCloud Zuul Filter 介绍 过滤器概述 Zuul的中心是一系列过滤器,能够在HTTP请求和响应的路由过程中执行一系列操作. 以下是Zuul过滤器的主要特征: 类型:通常在应用过滤器时在路由流程中定义阶段(尽管它可以是任何自定义字

SpringCloud学习心得—1.3—Eureka与REST API

SpringCloud学习心得—1.3—Eureka与REST API Eureka的REST API接口 API的基本访问 Eureka REST APIEureka 作为注册中心,其本质是存储了每个客户端的注册信息,Ribbon 在转发的时候会获取注册中心的服务列表,然后根据对应的路由规则来选择一个服务给 Feign 来进行调用. 如果我们不是Spring Cloud 技术选型,也想用 Eureka,可以吗?完全可以. 如果不是 Spring Cloud 技术栈,推荐用 Zookeeper,

SpringCloud学习之Stream消息驱动【自定义通道】(十一)

如果不清楚本篇内容的,请务必先去看完上一篇再看本篇,否则阅读起来可能会有部分障碍和困难: 上一篇文章<SpringCloud学习之Stream消息驱动[默认通道](十)>我们简单用自定义通道实现了消息发送和接收,但是用的是Stream给我们提供的默认Source,Sink,接下来我们要自己进行自定义,这种方式在工作中还是用的比较多的,因为我们要往不同的消息通道发消息,必然不能全都叫input,output的,那样的话就乱套了 (一)创建消息生产者[service-sender-stream-8

SpringCloud项目之Feign搭建

从零搭建一个SpringCloud项目之Feign搭建 工程简述 目的:实现trade服务通过feign调用user服务的功能.因为trade服务会用到user里的一些类和接口,所以抽出了其他服务需要的东西到user-api工程.避免trade直接依赖user导致依赖多余的东西. 一.创建User接口工程user-api 新建一个module,取名为study-user-api 引入pom文件 <dependencies> <dependency> <groupId>o