Springcloud1---->openFeign

news2024/11/17 11:43:48

目录

  • 简介
  • 快速入门
    • 导入依赖
    • 开启Feign
    • 配置Feign客户端接口
    • Feign使用
    • 小结feign
  • feign配置负载均衡
  • feign配置Hystix支持

简介

Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。
项目主页:https://github.com/OpenFeign/feign
在这里插入图片描述

快速入门

feign 主要也是在消费者项目中进行伪装,所以我们依然是在消费者项目中添加如下信息。

导入依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

开启Feign

@EnableFeignClients //开启feign
在这里插入图片描述

配置Feign客户端接口

feign的实现需要我们去配置伪装对应的请求类型、路径、参数、返回值,所以我们需要在consumer项目中单独为期创建一个客户端接口,我们只需要提供接口即可,底层默认采用了jdk动态代理帮助我们自动实现了对应的功能。
在这里插入图片描述

 * 
 *  feign的接口
 *  这个不用手写实现类,feign底层会通过jdk动态代理实现对应的类
 *  @Author: sunwz
 *
 */
@FeignClient(value = "order-service")//配置请求地址
public interface OrderFeignApi {
    @GetMapping("/order/{id}") //请求的类型和参数
    public Order byId(@PathVariable("id") Long id);
}

Feign使用

我们先在consumerController中注入刚才编写的接口。

@Autowired
private OrderFeignApi OrderFeignApi ;

注销复制新的方法,编写feign类型代码controller:

  @Autowired
    private UserFeignApi userFeignApi;

    /**
     * 根基ID查询
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Order byId(@PathVariable("id") Long id) {
         Order order = orderService.getById(id);
         User user = userFeignApi.byId(order.getUserId());
         order.setUser(user);
        return order;
    }
    public Order ww(@PathVariable Long id){
        return  new Order();
    }

在这里插入图片描述
你会发现RestTemplate的注册被我删除了。Feign中已经自动集成了Ribbon负载均衡,因此我们不需要自己定义RestTemplate了

小结feign

在上述案例中,我们也发现了feign底层默认就使用了restTemplate功能,那么我们就不需要自己再手动注入,并且也可以默认不用手动创建restTemplate了,并且feign也帮我们默认集成了hystrix和ribbon 那么也就意味着我们的feign功能绝不是单纯伪装那么简单了。

feign配置负载均衡

Feign中本身已经集成了Ribbon依赖和自动配置,因此我们不需要额外引入依赖,也不需要再注册RestTemplate对象。另外,我们可以像上节课中讲的那样去配置Ribbon,可以通过ribbon.xx来进行全局配置。

user-service:
	ribbon: # 改默认轮询为随机
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
		ConnectTimeout: 250 # 连接超时时间(ms)
		ReadTimeout: 1000 # 通信超时时间(ms)
		OkToRetryOnAllOperations: true # 是否对所有操作重试
		MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
		MaxAutoRetries: 1 # 同一实例的重试次数

所以feign默认支持了负载的全部配置及功能,我们直接正常使用即可。

feign配置Hystix支持

对于Hystix在feign中,默认是关闭的,需要我们手动去启用:
添加配置文件:

feign:
  hystrix:
    enabled: true # 开启Feign的熔断功能

但是,Feign中的Fallback配置不像Hystrix中那样简单了。
1)首先,我们要定义一个类,实现刚才编写的OrderFeignApi 接口,作为fallback的处理类

 *  feign的接口
 *  这个不用手写实现类,feign底层会通过jdk动态代理实现对应的类
 *  @Author: sunwz
 *
 */
@FeignClient(value = "order-service",fallback = OrderFeignApi.class)//配置请求地址
public interface OrderFeignApi {
    @GetMapping("/order/{id}") //请求的类型和参数
    public Order byId(@PathVariable("id") Long id);
}

在这里插入图片描述
2)首先,我们要编写这个实现类

@Component
public class OrderFeignApiImpl implements OrderFeignApi {
    @Override
    public Order byId(Long id) {
        return new Order();
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebSocket 详解,以及用QWebSocket 实现服务端和客户端(含代码例子)

目录 1、WebSocket 诞生背景 2、WebSocket的特点&#xff1a; 3、 WebSocket 简介 4、WebSocket 优点 5、QWebSocket通讯—客户端&#xff1a; 6、QWebSocket通讯—服务端&#xff1a; 1、WebSocket 诞生背景 早期&#xff0c;很多网站为了实现推送技术&#xff0c;所用的技术都…

初始Linux发展

目录 前言 Linux概念&#xff1a; 一.Linux发展历史 二.Linux的发展现状 三.发行版本 四.Linux 环境的搭建方式 主要有三种 : 4.6下载方式&#xff1a; 五.XShell软件 前言 Linux概念&#xff1a; Linux&#xff0c;全称GNU/Linux&#xff0c;是一套免费使用和自由传播的…

python中的对象和变量的关系

这里写目录标题 对象简介对象的结构变量和对象 对象简介 Python是一门面向对象的编程语言&#xff01; 一切皆对象&#xff01; 程序运行当中&#xff0c;所有的数据都是存储到内存当中然后再运行的&#xff01; 对象就是内存中专门用来存储指定数据的一块区域 对象实际上就是…

《计算机网络—自顶向下方法》 Wireshark实验(九):DHCP 协议分析

DHCP&#xff08;Dynamic Host configuration protocol&#xff09;动态主机配置协议&#xff0c;它可以为客户机自动分配 IP 地址、子网掩码以及缺省网关、DNS 服务器的 IP 地址等 TCP/IP 参数&#xff0c; 简单来说&#xff0c;就是在 DHCP 服务器上有一个数据库&#xff0c;…

Go开发PaaS平台核心功能

Go开发PaaS平台核心功能 1 云原生PaaS平台介绍 随着云计算的发展&#xff0c;越来越多的企业逐步的把IT资源迁移到云上。PaaS平台作为基础设施基座&#xff0c;可以帮助企业快速构建功能丰富的容器云平台&#xff0c;提升交付效率&#xff0c;降低成本。 [1.1] 云原生平台使…

【SpringMVC框架】--01.简介、入门、@RequestMapping、获取请求参数、域对象共享数据、视图、RestFul

文章目录 SpringMVC1.简介1.1 什么是MVC1.2 什么是SpringMVC1.3 SpringMVC的特点 2.编写HelloWorld2.1 创建maven工程2.2 配置web.xml2.3 创建请求控制器2.4 创建springMVC的配置文件2.5测试HelloWorld2.6总结 3.RequestMapping注解3.1 RequestMapping注解的功能3.2 RequestMap…

Java自定义类:打造属于自己的编程世界

&#x1f9d1;‍&#x1f4bb;CSDN主页&#xff1a;夏志121的主页 &#x1f4cb;专栏地址&#xff1a;Java核心技术专栏 目录 一、自定义类示例 二、隐式参数与显式参数 三、封装的优点 自定义类是Java中最基本、也是最重要的组成部分之一&#xff0c;使用者可以根据需求创建…

【Go微服务开发】gin+grpc+etcd 重构 grpc-todolist 项目

写在前面 最近稍微重构了之前写的 grpc-todolist 模块 项目地址&#xff1a;https://github.com/CocaineCong/grpc-todoList 1. 项目结构改变 与之前的目录有很大的区别 1.1 grpc_todolist 项目总体 1.1.1 改变前 grpc-todolist/ ├── api-gatway // 网关模块 ├── ta…

【小白版】最简单的 goland package 教程包括自定义包的使用

一、Hello World 最简单的教程&#xff0c;就需要从最简单的事情开始说起&#xff1a; mkdir myappcd myappgo mod init myapp // myapp是主项目名 这行命令将生成一个go.mod文件&#xff0c;这个文件会记录所有的包的依赖关系&#xff0c;一个空的go.mod只有项目名称和go版本…

智能指针详解

概念 在c中&#xff0c;动态内存的管理式通过一对运算符来完成的&#xff1a;new,在动态内存中为对象分配空间并返回一个指向该对象的指针&#xff0c;我们可以选择对对象进行初始化&#xff1b;delete&#xff0c;接受一个动态对象的指针&#xff0c;销毁该对象&#xff0c;并…

gitlab建立新分支提交,cherry-pick部分更新

gitlab介绍 GitLab是一个基于Git的在线代码托管和协作平台&#xff0c;提供源代码管理、单元测试、CI/CD构建、代码审查等功能。它是一个开放源代码的Git仓库管理系统&#xff0c;使用 Ruby on Rails 构建GitLab 不仅具有自己的 Git 仓库管理系统&#xff0c;还具有很多其他的…

AI 加持的代码编写实战:快速实现 Nginx 配置格式化工具

本篇文章聊聊如何使用 GPT 快速完成一个开源小项目&#xff0c;解决实际的问题&#xff0c;顺手点亮 GitHub 上 Nginx 开源社区的贡献者图标。 “Talk is Cheap&#xff0c;Show you the Code。” 写在前面 整理了一篇本该上个月就发出的内容。 前段时间&#xff0c;有个投…

浅谈JDK8的垃圾回收器

JDK1.8默认使用Parallel Scavenge作为年轻代的垃圾回收器,使用Parallel Old作为老年代的垃圾回收器&#xff0c;又称为PS MarkSweep。 Parallel Scavenge 收集器 Parallel Scavenge收集器又称为吞吐量优先收集器&#xff0c;和ParNew收集器类似&#xff0c;是一个新生代收集器。…

【OpenCV DNN】Flask 视频监控目标检测教程 01

欢迎关注『OpenCV DNN Youcans』系列&#xff0c;持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 01 【OpenCV DNN】Flask 视频监控目标检测教程 01 1. 面向Python程序的Web框架2. Flask 框架的安装与使用2.1 Flask 安装2.2 Flask 框架例程2.3 绑定IP和端口2.4 Flask路…

2023-5-20基于52单片机的智能家居系统(蓝牙)

资料已上传在微信公众号&#xff1a;风吹摇铃 奔赴星海 此系统可根据开发板原理图搭配外载模块实现功能&#xff0c;也可以根据原理图焊接或者PCB焊接。 注意&#xff1a;根据开发板搭载外部模块实现功能&#xff0c;需根据开发板原理图修改代码 0、整理及编写了19个常用的5…

NameServer路由注册与发现

NameServer在RocketMQ中主要承担的就是路由的管理、服务注册、以及服务的发现。在RocketMQ这承担着很重要的责任。 整体架构&#xff1a; 消息生产者在发送消息前需要考虑的问题就是&#xff0c;我需要发给谁&#xff1f;地址在哪儿&#xff1f;对于消费者也一样。那么NameSer…

软件工程 | 期末复习

一、软件与软件危机 1、软件发展经历三个阶段&#xff1a;程序设计、程序系统、软件工程 2、软件的概念&#xff1a;软件是计算机系统与硬件相互依存的另一部分&#xff0c;包括程序、数据以及相关文档的完整集合&#xff0c;软件程序数据文档 数据&#xff1a;使程序能够适…

测试人员转型是大势所趋:我的十年经验告诉我,你必须要行动起来了。

做测试十多年&#xff0c;有不少人问过我下面问题&#xff1a; 现在的手工测试真的不行了吗&#xff1f; 测试工程师&#xff0c;三年多快四年的经验&#xff0c;入门自动化测试需要多久&#xff1f; 自学自动化测试到底需要学哪些东西&#xff1f; 不得不说&#xff0c;随着行…

学习open62541 --- [76] 使用智能指针处理内存释放问题

在使用监测项时&#xff0c;一般都会加一个context&#xff0c;然后在回调函数里使用这个context&#xff0c;这就需要保证context的内存空间在执行回调函数时是有效的。往往有以下三种方法&#xff1a; 使用静态内存空间&#xff1a;使用static创建静态变量&#xff0c;然后把…

【Python 爬虫常见的报错及其解决方法】零基础也能轻松掌握的学习路线与参考资料

Python 爬虫被广泛应用于数据采集和分析。然而&#xff0c;爬虫在运行过程中常常会遇到各种问题和错误&#xff0c;降低了爬虫效率、准确性和可靠性。因此掌握爬虫常见报错及其解决方法是非常关键的。本文将介绍 Python 爬虫常见的报错及其解决方法&#xff0c;并提供参考资料和…