SpringCloud Feign超详细讲解

目录
  • 一、什么是Feign
  • 二、Feign能干什么
  • 三、Feign的使用步骤
    • 1、新建一个module
    • 2、配置Pom.xml
    • 3、配置applicatin.yaml
    • 4、配置configBean
    • 5、配置Controller类
    • 6、配置启动类
    • 7、改动API
      • 1)引入Feign依赖
      • 2)配置Service
      • 3)注意
  • 四、结果

一、什么是Feign

Feign是声明式Web Service客户端,它让微服务之间的调用变得更简单,类似controller调用service。SpringCloud集成了Ribbon和Eureka,可以使用Feigin提供负载均衡的http客户端。Feign是通过接口和注释来实现负载均衡的。

二、Feign能干什么

(摘抄自狂神说JAVA)

Feign能干什么?

Feign旨在使编写Java Http客户端变得更容易

前面在使用Ribbon + RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一个客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步的封装,由他来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它 (类似以前Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解),即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon 时,自动封装服务调用客户端的开发量。

Feign默认集成了Ribbon

利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

三、Feign的使用步骤

1、新建一个module

2、配置Pom.xml

<?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-demo2</artifactId>
        <groupId>com.you</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>springcloud-eureka-7001</artifactId>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <!--Eureka Server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
</project>

3、配置applicatin.yaml

server:
  port: 801

eureka:
  client:
    register-with-eureka: false  #不向eureka注册自己
    service-url:
      defaultZone: http://localhost:7001/eureka/
ribbon:
  eureka:
    enabled: true

4、配置configBean

package com.you.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
    @Bean
    @LoadBalanced  //ribbon
    /*配置负载均衡实现RestTemplate*/
    /*IRule*/
    /*RoundRobinRule 轮询 */
    /*RandomRule 随机*/
    /*AvailabilityFilteringRule 优先过滤掉跳闸、访问故障的服务,对剩下的进行轮询 */
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

5、配置Controller类

package com.you.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
    @Bean
    @LoadBalanced  //ribbon
    /*配置负载均衡实现RestTemplate*/
    /*IRule*/
    /*RoundRobinRule 轮询 */
    /*RandomRule 随机*/
    /*AvailabilityFilteringRule 优先过滤掉跳闸、访问故障的服务,对剩下的进行轮询 */
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

6、配置启动类

package com.you;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {
        "com.you"})
public class FeignDeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(FeignDeptConsumer_80.class,args);
    }
}

7、改动API

1)引入Feign依赖

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

2)配置Service

package com.you.service;
import com.you.pojo.Dept;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Component
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")
public interface DeptClientService {
    @GetMapping("/dept/aDept/{id}")
    public Dept getDeptOfId(@PathVariable("id") Long id);
}

3)注意

服务名字要写对GetMapper中的内容要和提供者一致,否则报错(找了一下午)

下面是提供者的内容

四、结果

这样即可获取到数据,而且负载平衡的默认算法,仍然是轮询!

到此这篇关于SpringCloud Feign超详细讲解的文章就介绍到这了,更多相关SpringCloud Feign内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringCloud Feign客户端使用流程

    目录 一.HTTP客户端Feign 1.1RestTemplate方式调用存在的问题 1.2Feign的介绍 1.3Feign的使用 1.4自定义Feign的配置 1.5Feign性能优化 1.6Feign的最佳实践 一.HTTP客户端Feign 1.1RestTemplate方式调用存在的问题 以前我用使用RestTemplate发起远程调用的代码: String url = "http://userservice/user/" + order.getUserId(); User u

  • SpringCloud Feign远程调用实现详解

    目录 1. Feign远程调用 1.1.Feign替代RestTemplate 1.2.自定义配置 1.2.1.配置文件方式 1.2.2.Java代码方式 2.Feign使用优化 3. 最佳实践 3.1.继承方式 3.2.抽取方式 3.3.实现基于抽取的最佳实践 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 1. Feign远程调用 Feign是一个声明式的http客户端,官方地址:https://gith

  • SpringCloud openfeign声明式服务调用实现方法介绍

    目录 一.介绍 二.使用 三.通讯优化 一.介绍 OpenFeign是一种声明式.模板化的HTTP客户端(仅在Application Client中使用)(称OpenFeign作用:声明式服务调用).声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求.OpenFeign替换RestTemplate. 二.使用 (1)导入依赖 <parent> <groupId>org.springframework.boot</groupId> <ar

  • SpringCloud Feign远程调用与自定义配置详解

    目录 Feign远程调用 1.1.Feign概述 1.2.Feign替代RestTemplate 1.2.1 引入依赖 1.2.2 添加注解 1.2.3. 编写Feign的消费服务提供服务 1.2.4 测试 1.2.5 总结 1.3.自定义配置 1.3.1 方式一配置文件方式 1.3.2 方式二Java代码方式 Feign远程调用 1.1.Feign概述 Feign是一款Java语言编写的HttpClient绑定器,在Spring Cloud微服务中用于实现微服务之间的声明式调用.Feign 可

  • SpringCloud Feign隔离与降级详细分析

    目录 序篇 FeignClient整合Sentinel 1.1 修改配置,开启sentinel功能 1.2 编写失败降级逻辑 1.3 总结 序篇 限流是一种预防措施,虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障. 而要将这些故障控制在一定范围,避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了. 线程隔离:调用者在调用服务提供者时,给每个调用的请求分配独立线程池,出现故障时,最多消耗这个线程池内资源,避免把调用者的所有资源耗尽. 熔断降级:是在调用方这边加入断路器

  • SpringCloud OpenFeign与Ribbon客户端配置详解

    目录 一.前言 二.OpenFeign与Ribbon配置 1.OpenFeign默认处理请求超时时间 1.1.模拟处理请求0.5秒 1.2.模拟处理请求1秒 2.Ribbon配置 2.1.配置请求处理超时5秒 2.2.模拟请求处理5秒 3.OpenFeign配置 3.1.配置请求处理超时6秒 3.2.OpenFeign配置对全部服务有效 3.3.针对某个服务 一.前言 OpenFeign为微服务架构下服务之间的调用提供了解决方案,OpenFeign是一种声明式.模板化的HTTP客户端.在Spri

  • SpringCloud Feign超详细讲解

    目录 一.什么是Feign 二.Feign能干什么 三.Feign的使用步骤 1.新建一个module 2.配置Pom.xml 3.配置applicatin.yaml 4.配置configBean 5.配置Controller类 6.配置启动类 7.改动API 1)引入Feign依赖 2)配置Service 3)注意 四.结果 一.什么是Feign Feign是声明式Web Service客户端,它让微服务之间的调用变得更简单,类似controller调用service.SpringCloud集

  • SpringCloud OpenFeign超详细讲解模板化远程通信的实现

    目录 1. openFeign实现 1.1 pom依赖 1.2 yaml配置 1.3 客户端调用代码 1.4.服务端暴露接口 1.5.测试日志 1. openFeign实现 基于spring-boot-starter-parent 2.6.8,spring-cloud-dependencies 2021.0.3,一个order服务一个user服务 1.1 pom依赖 <!--nacos服务注册与发现--> <dependency> <groupId>com.alibab

  • SpringCloud超详细讲解Feign声明式服务调用

    目录 入门案例 @FeignClient注解详解 Feign Client的配置 Feign请求添加headers 负载均衡 (Ribbon) 容错机制 Hystrix支持 Sentinel支持 Feign开启容错机制支持后的使用方式 请求压缩feign.compression 日志级别 入门案例 在服务消费者导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>

  • SpringCloud超详细讲解微服务网关Zuul

    目录 网关的作用 Spring Cloud 网关组件Zuul介绍 Zuul网关实战 1.创建服务 2.创建配置文件 3.创建Zuul过滤器 4.编写启动类 5.启动验证 总结 网关的作用 微服务架构中,服务实例的地址可能经常会发生变化,所以我们不能直接将服务的地址暴露出来.如果每一个微服务都直接暴露接口,会导致一系列的问题,比如调用过于复杂,涉及到账户.权限不能统一处理等.另外基于高内聚低耦合的设计准则来讲,我们也应该将内部系统和外部系统做切割. 因此,这时就需要有一个独立的组件来处理外部的请求

  • 超详细讲解SpringCloud Commons公共抽象的用法

    目录 Spring Cloud Commons公共抽象 @EnableDiscoveryClient 服务注册ServiceRegistry RestTemplate的负载均衡 RestTemplate的失败重试 本期主角——Spring Cloud Commons:公共抽象 Spring Cloud Commons公共抽象 Spring Cloud将服务发现.负载均衡和断路器等通用模型封装在一个公共抽象中,可以被所有的Spring Cloud客户端使用,不依赖于具体的实现(例如服务发现就有Eu

  • SpringCloud超详细讲解负载均衡组件Ribbon源码

    目录 前言 项目实战 创建项目 启动项目验证 源码分析 选择服务 地址替换 总结 前言 上一篇文章中我们通过自己开发了一个负载均衡组件,实现了随机算法的负载均衡功能,如果要实现其他算法,还需要修改代码增加相应的功能.这一篇文章,我们将介绍一个更简单的负载均衡实现,使用**@LoadBalanced**注解实现负载均衡的功能. 项目实战 创建项目 同样的,我们的项目现在依然有一个registry注册中心,一个provider服务提供者,接下来,我们再次修改一下consumer服务消费者的代码: @

  • SpringCloud超详细讲解微服务网关Gateway

    目录 前言 微服务网关GateWay介绍 GateWay特性介绍 Gateway 中的相关术语 Gateway实战 1.创建项目gateway 2.创建启动类 3.新增配置文件 4.编程方式实现路由 5.启动验证 总结 前言 上一篇:微服务网关Zuul 上文中,我们介绍了微服务网关Zuul,Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件,但是随着 Netflix 公司一系列的停更事件,在最新的 S

  • SpringCloud Nacos配置中心管理超详细讲解

    目录 一.Nacos配置管理 1.1 统一配置管理 1.1.1在nacos中添加配置文件 1.1.2 从微服务拉取配置 1.2 配置热更新 1.2.1 方式一 1.2.2 方式二 1.3 配置共享 一.Nacos配置管理 Nacos除了可以做注册中心,同样可以做配置管理来用 1.1 统一配置管理 当微服务部署越来越多,达到数十,数百时,逐个修改微服务配置就会很麻烦,且容易出错.我们需要一种统一配置管理方案,可以集中管理所有实例的配置. Nacos一方面更可以将配置集中管理另一方面在配置变更时,及

  • SpringCloud Nacos作为配置中心超详细讲解

    目录 前言 Nacos配置模型 配置介绍 实际演练 前言 在单体架构的时候我们可以将配置写在配置文件中,但有⼀个缺点就是每次修改配置都需要重启服务才能生效. 当应用程序实例比较少的时候还可以维护.如果转向微服务架构有成百上千个实例,每修改⼀次配置要将全部实例重启,不仅增加了系统的不稳定性,也提高了维护的成本. 那么如何能够做到服务不重启就可以修改配置?所有就产生了四个基础诉求: 需要支持动态修改配置 需要动态变更有多实时 变更快了之后如何管控控制变更风险,如灰度.回滚等 敏感配置如何做安全配置

  • Spring超详细讲解注解开发

    目录 1.使用注解开发 1.1.Bean的实现 1.2.属性注入 1.3.衍生注解 1.4.自动装配注解 1.5.作用域 1.6.小结 2.基于Java类进行配置 1.使用注解开发 说明 在spring4之后,想要使用注解形式,必须得要引入aop的包 在配置文件当中,还得要引入一个context约束 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring

随机推荐