系列导航

SpringCloud学习 系列一、 前言-为什么要学习微服务

SpringCloud学习 系列二、 简介

SpringCloud学习 系列三、 创建一个没有使用springCloud的服务提供者和消费者

SpringCloud学习 系列四、微服务中心 Eureka介绍及创建一个Eureka中心服务

SpringCloud学习 系列五、创建生产者和消费者验证微服务中心 Eureka的作用

SpringCloud学习 系列六、服务平滑离线

SpringCloud学习 系列七、EurekaServer集群创建

SpringCloud学习 系列八、OpenFeign

SpringCloud学习 系列九、Ribbon

SpringCloud学习 系列十、服务熔断与降级(1-简介)

SpringCloud学习 系列十、服务熔断与降级(2-方法级别服务降级)

SpringCloud学习 系列十、服务熔断与降级(3-类级别的服务降级)

SpringCloud学习 系列十、服务熔断与降级(4-Dashboard监控仪表盘)

1、官网介绍

声明式 REST 客户端:Feign 通过使用 JAX-RS(Java Api eXtensions for RESTful WebServices,简单来说,就是一种使用注解来实现 RESTful 的技术)或 SpringMVC 注解的装饰方式,生成接口的动态实现。

2、通俗理解

Feign含义:假装,伪装。

OpenFeign可以将提供者提供的Restful服务伪装为接口进行消费,消费者只需使用“feign接口 + 注解”的方式即可直接调用提供者提供的 Restful 服务,而无需再使用 RestTemplate。

注意:

Feign 接口是由消费者调用,与提供者没有任何关系。

Feign 仅是一个伪客户端,其不会对请求做任何处理。

Feign 是通过注解的方式实现 RESTful 请求的。

3、创建OpenFeign的工程

为了留存之前的代码,将02-provider-8081复制一份变为03-provider-8081,为了演示方便将注册到集群的功能改回注册到单机eureka

(1)复制 02-consumer-8080命名为 03-consumer-feign-8080。

(2)添加依赖

(3)修改启动类

(4)定义Feign接口

这里要注意:上面selectList方法本来用@GetMapping的,但是如果要传递json参数就必须要改成@PostMapping否则会报错:如下

BUG:feign.FeignException$MethodNotAllowed: status 405 reading

<1>因为要用post方法所以03-provider-8081的Controller也要该成相应的Post方法。
<2>这里还要特别强调一下@RequestBody的用法,provider中参数的接收,路径上的参数可以不用@RequestBody,但是非路径上的参数必须用@RequestBody才可以接收到参数,否则参数无法接收。

(5)删除如下类

(6)修改处理器

(7)修改启动类

(8)启动程序验证

1、启动00-eurekaserver-8000、03-provider-8081、03-consumer-feign-8080

2、consumer/block/get/1  测试单条查询

这是测试路径中的参数

3、consumer/block/list 测试

不带参数测试

带参数测试

4、consumer/block/add  测试新增

5、consumer/block/update/7 测试修改

6、consumer/block/delete/7 测试删除

全部验证完毕,feign的功能都好用了。

(9)超时策略

最后补充一下超时的策略,feign客户端需要调用provider的提供的服务,feign客户端等待多久没有收到响应可以认为是请求失败。

直接上实例

1、修改03-feignConsumer-8080的配置文件

2、修改服务实现类,增加一段休眠6秒的程序

3、重启03-provider-8081、03-consumer-feign-8080

4、访问consumer/block/get/1验证超时

SpringCloud学习 系列八、OpenFeign的更多相关文章

  1. SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)

    前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...

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

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  3. Linux学习系列八:操作网口

    一些相对高性能的单片机会带以太网接口,网口在MCU里算是比较复杂的外设了,因为它涉及到网络协议栈,通常情况下网络协议栈会运行在一个RTOS中,所以对普通单片机开发者来说网口使用起来相对难度较大一些.在 ...

  4. SpringCloud学习系列<一>版本介绍

    SpringCloud学习踩坑记<一> SpringCloud版本迭代实在太快,学习起来也是各种坑,博主用的是"当前"的最新版本,借鉴周立老大的Spring Cloud ...

  5. SpringCloud学习系列-微服务

    最近和尚硅谷周阳老师学习了Spring Cloud感觉有必要在这里做下笔记和总结. 软件系统架构演变 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用 ...

  6. SpringCloud学习系列之六 ----- 路由网关Zuul基础使用教程

    前言 在上篇中介绍了SpringCloud Config的完美使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由网关 ...

  7. SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版

    前言 在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心( ...

  8. SpringCloud学习系列之四-----配置中心(Config)使用详解

    前言 本篇主要介绍的是SpringCloud中的分布式配置中心(SpringCloud Config)的相关使用教程. SpringCloud Config Config 介绍 Spring Clou ...

  9. SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)使用详解

    前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡. SpringCloud Feign Fei ...

  10. SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)

    前言 本篇主要介绍的是SpringCloud相关知识.微服务架构以及搭建一个高可用的服务注册与发现的服务模块(Eureka). SpringCloud介绍 Spring Cloud是在Spring B ...

随机推荐

  1. IDEA提示Cannot resolve class or package ‘beans‘等类似错误

    一.解决方案 1.问题原因: 2.解决: 快捷键:Alt+Enter选择.

  2. 通信技术 Communication

    缩写 全称 翻译 备注 I2C Inter-Integrated Circuit 集成电路总线 通信协议 SPI Serial Peripheral Interface 串行外设接口 通信协议 QSP ...

  3. [ARC165D] Substring Comparison

    Problem Statement For an integer sequence $X=(X_1,X_2,\dots,X_n)$, let $X[L,R]$ denote the integer s ...

  4. [AGC024F] Simple Subsequence Problem

    Problem Statement You are given a set $S$ of strings consisting of 0 and 1, and an integer $K$. Find ...

  5. 基于Raft算法的DLedger-Library分析

    1 背景 在分布式系统应用中,高可用.一致性是经常面临的问题,针对不同的应用场景,我们会选择不同的架构方式,比如master-slave.基于ZooKeeper选主.随着时间的推移,出现了基于Raft ...

  6. chrome浏览器出现《您的连接不是私密链接》

    问题现象 键盘切换到英文输入 点击页面,就页面中间随意点一下即可 不是输入框!不是输入框!不是输入框! 不是找啦!不是找啦!不是找啦! 在chrome该页面上,直接键盘敲入这11个字符:thisisu ...

  7. flask请求钩子(就是django的中间件)

    flask中的请求钩子就是域django的中间件类似,作用都是用于在请求前.后.响应前.后进行一些hook操作. 请求钩子装饰器 @app.before_request # 请求前会调用,一般可以用来 ...

  8. Charles的奇巧淫技

    大家好,我是 dom 哥.今天讨论一下 Charles 的高级用法. Charles 是 mac 电脑的一个网络代理软件,也是我平时开发常用的一个工具,用过的都说好. 本文不是 Charles 的入门 ...

  9. 使用RFC跳过权限校验的方法

    1.业务背景 由于业务流程的复杂性,用户往往只具备部分功能的权限,导致在操作自开发程序时出现权限问题.例如前台限制了用户对销售订单的修改,而自开发功能中又涉及单据修改,此时一味限制权限,则无法正常使用 ...

  10. React 类组件转换为函数式

    函数式的 React 组件更加现代,并支持有用的 hooks,现在流行把旧式的类组件转换为函数式组件.这篇文章总结了转换的一些通用的步骤和陷阱. 通用替换 定义 从 class (\w+) exten ...