springcloud第七篇|声明式服务调用feign

coding-farmer      2022-05-19     332

关键词:

技术图片

本文是Spring Cloud专栏的第七篇文章,了解前六篇文章内容有助于更好的理解本文:

  1. Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览

  2. Spring Cloud第二篇 | 使用并认识Eureka注册中心

  3. Spring Cloud第三篇 | 搭建高可用Eureka注册中心

  4. Spring Cloud第四篇 | 客户端负载均衡Ribbon

  5. Spring Cloud第五篇 | 服务熔断Hystrix

  6. Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard

技术图片

一、Feign是什么

    Feign是Netflix公司开发的一个声明式的REST调用客户端; Ribbon负载均衡、 Hystrⅸ服务熔断是我们Spring Cloud中进行微服务开发非常基础的组件,在使用的过程中我们也发现它们一般都是同时出现的,而且配置也都非常相似,每次开发都有很多相同的代码,因此Spring Cloud基于Netflix Feign整合了Ribbon和Hystrix两个组件,让我们的开发工作变得更加简单, 就像Spring boot是对Spring+ SpringMVC的简化, Spring Cloud Feign对Ribbon负载均衡、 Hystrⅸ服务熔断进行简化,在其基础上进行了进一步的封装,不仅在配置上大大简化了开发工作,同时还提供了一种声明式的Web服务客户端定义方式。使用方式类似Dubbo的使用方式。

二、使用Feign实现消费者

1、创建消费者服务命名为(springcloud-service-feign)

2、添加依赖

    <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>

3、在启动类上添加注解

@EnableFeignClients

4、声明服务

    定义一个HelloService接口,通过@FeignClient注解来指定服务名称进而绑定服务,然后在通过Spring  MVC中提供的注解来绑定服务提供者的接口,如下:

//使用feign的客户端注解绑定远程的名称,名称可以是大写,也可以小写
@FeignClient(value = "springcloud-service-provider")
public interface HelloService {
    //声明一个方法,这个方法就是远程的服务提供者提供的方法
    @RequestMapping("/provider/hello")
    public String hello();   
}

5、使用Controller中调用服务,代码如下

    @Autowired
    private HelloService helloService;

    @RequestMapping("/hello")
    public String hello(){
        //调用声明式接口方法,实现对远程服务的调用
        return helloService.hello();
    }

6、application.yml配置如下

spring:
  application:
    name: springcloud-service-feign
server:
  port: 9091
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8700/eureka
    #客户端每隔30秒从Eureka服务上更新一次服务信息
    registry-fetch-interval-seconds: 30
    #需要将我的服务注册到eureka上
    register-with-eureka: true
    #需要检索服务
    fetch-registry: true
  #心跳检测检测与续约时间
  instance:
    #告诉服务端,如果我10s之内没有给你发心跳,就代表我故障了,将我剔除掉,默认90s
    #Eureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,超过则剔除(客户端告诉服务端按照此规则等待自己)
    lease-expiration-duration-in-seconds: 10
    #每隔2s向服务端发送一次心跳,证明自已依然活着,默认30s
    #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(客户端告诉服务端自己会按照该规则)
    lease-renewal-interval-in-seconds: 2

7、启动测试,访问地址http://localhost:9091/feign/hello

三、使用Feign支持的特性

负载均衡:

    Spring Cloud提供了Ribbon来实现负载均衡,使用Ribbo直接注入一个RestTemplate对象即可, RestTemplate已经做好了负载均衡的配置在Spring Cloud下,使用 Feign也是直接可以实现负载均衡的,定义一个有@FeignClient注解的接口,然后使用@RequestMappin注解到方法上映射远程的REST服务,此方法也是做好负责均衡配置的。

服务熔断:

1、在 application.yml文件开启hystrix功能

#开启hystrix熔断机制
feign:
  hystrix:
    enabled: true

2、指定熔断回调逻辑

@FeignClient(value = "springcloud-service-provider", fallback = MyFallback.class)
@Component
public class MyFallback implements HelloService {
    @Override
    public String hello() {
        return "远程服务不可用,暂时采用本地逻辑代替。。。。。";
    }
}

3、测试,让服务提供者超时就行了

如果需要捕获提供者抛出的异常可以用:

@FeignClient(value = "springcloud-service-provider", fallbackFactory = MyFallbackFactory.class)
@Component
public class MyFallbackFactory implements FallbackFactory<HelloService> {
    @Override
    public HelloService create(Throwable throwable) {

        return new HelloService() {
            @Override
            public String hello() {
                return throwable.getMessage();
            }
        };
    }
}

 

详细参考案例源码:https://gitee.com/coding-farmer/spirngcloud-learn

?

技术图片

技术图片

springcloud声明式服务调用:feign

Feign介绍Feign是一个声明式的REST客户端,它用了基于接口的注解方式,可以很方便地实现客户端配置。Feign最初由Netflix公司提供,但最初不支持SpringMVC注解,后由SpringCloud对其封装,才支持了SpringMVC注解,让使用者更易于接受 查看详情

springcloud:服务调用-声明式客户端访问

环境springcloudEdgware.SR6jdk7sts4.6.0mysql5.7背景通过声明式客户端openfeign进行支付微服务的访问。搭建步骤只需要修改支付服务调用层,增加依赖就可以了。支付服务调用层只需要定义接口,不需要进行实现。packagejiangbo.springcloud.dao;im... 查看详情

史上最简单的springcloud教程|第七篇:高可用的分布式配置中心(springcloudconfig)

最新Finchley版本请访问:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f7-config/或者http://blog.csdn.net/forezp/article/details/81041045上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多... 查看详情

业余草springcloud教程|第七篇:高可用的分布式配置中心(springcloudconfig)(finchley版本)

上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下:... 查看详情

springcloud——feign声明式服务调用(代码片段)

什么是FeignFeign是SpringCloudNetflix组件中的一个轻量级RESTFUL和HTTP服务客户端,实现了负载均衡和Rest调用的开源框架,封装了Ribbon和RestTemplate,实现了webService的面向接口编程,进一步降低了项目的耦合度。是一种声... 查看详情

springcloud——feign声明式服务调用(代码片段)

什么是FeignFeign是SpringCloudNetflix组件中的一个轻量级RESTFUL和HTTP服务客户端,实现了负载均衡和Rest调用的开源框架,封装了Ribbon和RestTemplate,实现了webService的面向接口编程,进一步降低了项目的耦合度。是一种声... 查看详情

springcloud无废话入门03:feign声明式服务调用

1.Feign概述     在上一篇的HelloService这个类中,我们有这样一行代码:     returnrestTemplate.getForObject("http://hello-service/hello",String.class);     查看详情

第七篇-列表式app:listactivity及listview

一、新建一个emptyactivity的项目。二、修改MainActivity.java:extendsAppCompactActivity改为extendsListActivity。注释掉setContentView(R.layout.activity_main);packagecom.example.aimee.listapp;importandroid.app.ListActivity;im 查看详情

springcloud入门教程:用声明式rest客户端feign调用远端http服务

首先简单解释一下什么是声明式实现?要做一件事,需要知道三个要素,where,what,how。即在哪里(where)用什么办法(how)做什么(what)。什么时候做(when)我们纳入how的范畴。1)编程式实现:每一个要素(where,what,how)都... 查看详情

第三章声明式服务调用(feign)

...有,Netflix已经为我们提供了一个框架:Feign。Feign是一个声明式的WebService客户端,它的目的就是让WebService调用更加简单。Fei 查看详情

openfeign:声明式服务调用

SpringCloudOpenFeign:声明式服务调用一、OpenFeign简介1.什么是OpenFeign​OpenFeign目前是SpringCloud二级子项目。平时说的Feign指的是Netflix下的Feign,现在我们学习的是OpenFeign,是Spring提供的。​OpenFeign是一种声明式、模板化的HTTP客户端(... 查看详情

openfeign:声明式服务调用

SpringCloudOpenFeign:声明式服务调用一、OpenFeign简介1.什么是OpenFeign​OpenFeign目前是SpringCloud二级子项目。平时说的Feign指的是Netflix下的Feign,现在我们学习的是OpenFeign,是Spring提供的。​OpenFeign是一种声明式、模板化的HTTP客户端(... 查看详情

springcloud(hoxton.sr3)基础篇:第六章feign声明式服务调用

一、Feign简介  在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下  ... 查看详情

springcloud——feign声明式服务调用(代码片段)

什么是FeignFeign是SpringCloudNetflix组件中的一个轻量级RESTFUL和HTTP服务客户端,实现了负载均衡和Rest调用的开源框架,封装了Ribbon和RestTemplate,实现了webService的面向接口编程,进一步降低了项目的耦合度。是一种声... 查看详情

springcloud之feign实现声明式rest调用

...的HTTP客户端,可帮助我们更加便捷、优雅的调用HTTPapi。springcloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便:只需要创建一个接口,并在接口上添加一些注解,代码就完成了... 查看详情

springcloud:使用feign实现声明式rest调用

一、简介前面我们是使用RestTemplate实现restapi调用的,代码如下:@GetMapping("/user/{id}")public User findById(@PathVariable Long id) throws Exception {    return & 查看详情

18.springcloud实战项目-整合openfeign实现声明式远程调用

SpringCloud实战项目全套学习教程连载中PassJava学习教程简介PassJava-Learning项目是PassJava(佳必过)项目的学习教程。对架构、业务、技术要点进行讲解。PassJava是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面... 查看详情

干货分享微服务spring-cloud(5.声明式服务调用feign)

Springcloudfeign基于Netflixfeign实现,整合了springcloudribbon与springcloudhystrix,除了提供这两者的强大功能之外,它还提供了一种声明式的web服务客户端定义方式新建springboot工程并命名为demo-springcloud-feign-consumer,新建启动类FeignApplication... 查看详情