转自:https://www.cnblogs.com/yimixiong/p/7927991.html

转:SpringBoot+SpringCloud —— 使用Feign消费服务

Feign简介

Spring Cloud Feign是基于Netflix Feign实现,整合了Spring Cloud Riggon与Spring Cloud Hystrix,出了提供这两者的强大功能外,他还提供了一种声明式的Web服务客户端定义方式。

在使用Spring Cloud Ribbon时,通常都会利用它对RestTemplate的请求拦截来实现对服务的调用,而RestTemplate已经实现了对HTTP请求的封装处理,形成了一套模板化的调用方法。

快速使用

添加对feign的依赖:

1

2

3

4

        <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-feign</artifactId>

</dependency>   

在主类使用注解开启Feign的功能:

1

2

3

4

5

6

7

8

9

@SpringBootApplication

@EnableDiscoveryClient

@EnableFeignClients

public class OwlBookstoreWebApiApplication {

    public static void main(String[] args) {

        SpringApplication.run(OwlBookstoreWebApiApplication.class, args);

    }

}

接着,创建调用接口,使用注解来消费服务:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import org.springframework.cloud.netflix.feign.FeignClient;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import cn.net.bysoft.owl.bookstore.facade.user.entity.User;

import cn.net.bysoft.owl.bookstore.web.api.fallback.UserServiceFallbackFactory;

@FeignClient(value = "https://my.oschina.net/u/2450666/blog/SERVICE-USER", fallbackFactory = UserServiceFallbackFactory.class)

public interface UserService {

    @RequestMapping(value = "https://my.oschina.net/users/{email}/", method = RequestMethod.GET)

    Boolean isExistsByEmail(@PathVariable("email") String email);

    @RequestMapping(value = "https://my.oschina.net/users/{id}", method = RequestMethod.GET)

    User findById(@PathVariable("id") Long id);

}

接口中声明的方法的参数与返回值,要与服务提供的方法一致。

Feign自动开启了Ribbon中的负载均衡和hystrix断路器,要使用断路器先需要开启断路器:

1

2

3

4

5

6

7

8

feign:

  hystrix:

    enabled: true

  compression:

    request:

      enabled: true

    response:

      enabled: true

我在Feign中使用的是fallbackFactory来降级服务,使用该方式可以同时处理服务抛出的异常,创建一个UserServiceFallbackFactory类:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import org.springframework.stereotype.Component;

import cn.net.bysoft.owl.bookstore.facade.user.entity.User;

import cn.net.bysoft.owl.bookstore.web.api.service.UserService;

import feign.hystrix.FallbackFactory;

@Component

public class UserServiceFallbackFactory implements FallbackFactory<UserService> {

    @Override

    public UserService create(Throwable cause) {

        return new UserService() {

            

            @Override

            public Boolean isExistsByEmail(String email) {

                system.out.println(cause.getmessage());

                return false;

            }

            

            @Override

            public User findById(Long id) {

                cause.printStackTrace();

                System.out.println(cause.getMessage());

                return null;

            }

            

        };

    }

}

Feign配置

Ribbon配置

全局配置的方法很简单:

1

2

ribbon.ConnectTimeout=500

ribbon.ReadTimeout=5000

SpringBoot+SpringCloud —— 使用Feign消费服务相关推荐

  1. springcloud用feign消费服务记录

    springcloud提供了两种消费服务的方式,feign和ribbon.实质上feign是集成了ribbon的,最终也是利用ribbon做了均衡负载发了http请求.ribbon的方式编码的时候更像 ...

  2. 解决SpringBoot+SpringCloud中feign调用服务传递参数为MultipartFile的问题

    文章目录 前言 一.前期说明 二.使用步骤 1.引入maven依赖 2.新建feign的配置类 2.feign客户端 3.被调用的服务的Controller 4.第三方服务远程调用主服务传递Multi ...

  3. springboot springcloud区别_SpringCloud微服务全家桶-第一篇!为什么要用微服务

    从今天开始,学习SpringCloud微服务全家桶. 一.引导 1.什么是微服务? 2.微服务之间是如何独立通讯的 3.springCloud和Dubbo有哪些区别? 4.什么是服务熔断?什么是服务降 ...

  4. 文件上传结合SpringCloud的Feign进行服务调用

    工作中一直使用的是SpringCloud,其中的多个组件的使用也已经有一段时间了,包括对组件的配置文件的编写,今天要讲的是SpringCloud中的一个远程服务调用的组件,使用Feign之后,我们调用 ...

  5. SpringCloud中Feign进行服务调用 java.io.IOException: too many bytes written 问题解决

    问题描述 Spring Cloud 中通过 Feign 调用微服务时,报错:java.io.IOException: too many bytes written 问题来源 在 Feign 调用拦截器 ...

  6. SpringCloud系列研究---Eureka服务消费Feign

    转载自:https://www.cnblogs.com/chxuyuan/p/8358998.html SpringCloud系列研究---Eureka服务消费Feign 一.Feign简介 Feig ...

  7. 2021/04/25 SpringBoot + SpringCloud微服务项⽬交付案例

    第1章 SpringBoot + SpringCloud微服务项⽬交付案例 1.1 微服务概念 传统的是用户通过终端链接到应用里 现在服务往越来越小的方向做,把每个服务做成一个独立的功能,每个服务完成 ...

  8. SpringBoot +SpringCloud微服务示例,整合FreeMaker,AngularJS

    SpringBoot +SpringCloud为服服务示例,整合FreeMaker,AngularJS 干货一篇,本节以SpringBoot + SpringCloud为例 构建轻量级微服务,旨在推荐 ...

  9. SpringBoot第十六篇:用restTemplate消费服务

    这篇文章主要介绍怎么用消费一个 Restful的web服务.我将用restTemplate去消费一个服务: http://gturnquist-quoters.cfapps.io/api/random ...

最新文章

  1. checkbox全选与反选
  2. JavaScript 编码小技巧
  3. [转]ASP.Net缓存总结
  4. java第二章选择题_Java第二章习题讲解(2)
  5. 培养这10个习惯,你就离UNIX高手更进一步了
  6. 漫画:什么是A*寻路算法
  7. 获取摄像机,摄像机切换Learn Unreal Engine (with C++)
  8. mysql on后加and_mysql加入ON和AND to laravel eloquent
  9. 日本python教材_自学python:完整入门python书单!
  10. 最佳圆角字体,设计师的最爱
  11. poj 2153 Rank List
  12. 进行有效客户细分的八个步骤
  13. 太极团队首发:iOS 8.3完美越狱工具发布
  14. 词法分析器(分析C语言)
  15. 记录为小电机安装一个5012编码器(多摩川协议)的过程
  16. OneApiConnect(一) Fins欧姆龙通讯协议实现源代码
  17. 世界很大,一定要出去看看
  18. 使用springboot,Oauth2.0,jwt令牌实现单点登录,权限控制等功能的基本流程
  19. [NOI 2010]航空管制
  20. 如何快速将MKV格式转换成MP4高清电影格式?

热门文章

  1. java编写一个框架_手把手教你写一个基于 RxJava 的扩展框架
  2. spring mysql 多数据源_spring框架学习【多数据源配置】
  3. python 与零值比较,python – 使用另一个数据帧替换数据帧中的零值
  4. python实现IIR高通低通,带通,带阻滤波器详解及应用案例
  5. mysql 左右值算法详解_无限分类左右值算法的常规操作逻辑
  6. 如何对您的API进行单元测试
  7. Azure Synapse Analytics简介第1部分:什么是Azure Synapse Analytics?
  8. 如何在ngRepeat中使用Bootstrap Span元素
  9. webrtc 渲染_[WebRTC架构分析]采样率转换
  10. parquet格式_【存储】基于列存之Parquet格式