微服务--Feign学习

news2024/11/24 14:01:30
  • Feign远程调用:

    • RestTemplate发起远程调用的代码:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrQlIktO-1675949482462)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230206175759882.png)]
      存在下面的问题

      • 代码可读性差,编程体验不统一
      • 参数复杂URL难以维护
    • Feign的介绍:Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LX14pPH3-1675949482463)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230206180308491.png)]

    • Feign替代RestTemplate:使用Feign的步骤如下

      1. 引入依赖:

           <!--使用Feign的依赖-->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-openfeign</artifactId>
                </dependency>
        
      2. 在order-service的启动类添加注解开启Feign的功能:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Exi3mZdR-1675949482464)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230206180929228.png)]

      3. 编写Feign客户端:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFVZllZR-1675949482464)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230206191317837.png)]

      4. 用Feign客户端代替RestTemplate
        在这里插入图片描述

    • 自定义配置:Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZSTDBTNA-1675949482465)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230207112857901.png)]

      • 方式一:配置文件方式

        1. 全局生效:

          feign:
            client:
              config:
                default: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
                  loggerLevel: FULL #日志级别
          
        2. 局部生效:

          feign:
            client:
              config:
                userservice: #这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
                  loggerLevel: FULL #日志级别
          
      • 方式二:Java代码方式,需要先声明一个Bean:

        public class FeignClientConfiguration {
            @Bean
            public Logger.Level feignLogLevel(){
                return Logger.Level.FULL;
            }
        }
        
        1. 全局配置,则把它放到@EnableFeignClients这个注解中:

          @EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
          
        2. 如果是局部配置,则把它放到@FeignClient这个注解中:

          @FeignClient(value = "userservice",configuration = FeignClientConfiguration.class)
          
    • Feign使用优化

      Feign底层的客户端实现:

      • URLConnection:默认实现,不支持连接池
      • ApacheHttpClient:支持连接池
      • OKHttp:支持连接池

      因此优化Feign的性能主要包括:

      1. 使用连接池代替默认的URLConnection
      2. 日志级别,最好用basic或none

      Feign的性能优化-连接池配置

      Feign添加HttpClient的支持:

      引入依赖:

            <dependency>
                  <groupId>io.github.openfeign</groupId>
                  <artifactId>feign-httpclient</artifactId>
              </dependency>
      

      配置连接池:

      feign:
        httpclient:
          enabled: true #开启feign对HttpClient的支持
          max-connections: 200 #最大的连接数
          max-connections-per-route: 50 #每个路径的最大连接数
      
    • Feign最佳实践

      • 方式一(继承):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GlVR7SVy-1675949482466)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230207153106143.png)]

      • 方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO,默认的Feign配置都放到这个模块中,提供给所有消费者使用[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YECFRELP-1675949482467)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20230207153847247.png)]

    • 实现最佳实践方式二的步骤如下:

      1. 首先创建一个module,命名为feign-api,然后引入feign的starter依赖
      2. 将order-service中的编写的UserClient,User,DefaultFeignConfiguration都复制到feign-api项目中
      3. 在order-service中引入feign-api的依赖
      4. 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包

      当定义的FeignClient不在SpringBootApplication的扫描范围时,这些FeignClient无法使用。有两种方式解决:

      1. 方式一:指定FeignClient所在包

        @EnableFeignClients(basePackages = "com.cdcas.feign")
        
      2. 方式二:指定FeignClient字节码

        @EnableFeignClients(clients = {UserClient.class})
        

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

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

相关文章

论文文献引用规范和标准(国标GBT7714)@endnote国标样式

文章目录论文文献引用规范和标准&#xff08;国标GBT7714&#xff09;国标GBT7714-2015endnote stylerefs简述国标GBT7714条目的组织格式Noteword中的文献交叉引用超链接文献引用示例endNote资源和基本使用endnote或其他文献引用工具下载word中的其他引文技巧知网国标格式引文引…

谈谈Java Optional的坑

开端&#xff1a; 大家好&#xff0c;我是老白。昨天朋友提出的java8后出来的自带的对象判定方式Optional.ofNullable(),后来查询了一些资料和自己试验了一些demo资料&#xff0c;在这里记录分享个大家 作用&#xff1a;判断对象是否为空&#xff0c;是则重新创建一个新对象&…

ABAP 搜索帮助带出多个字段描述 更新屏幕字段

文章目录需求解析1-DYNP_GET_STEPL2-F4IF_INT_TABLE_VALUE_REQUEST3-获取返回值4-把相应字段更新到内表5-DYNP_VALUES_UPDATE代码需求 如图,当我点击责任工序的搜说帮助时, 同时会把责任人员的描述带出来. 解析 1-DYNP_GET_STEPL 这个方法就是获取当前的循环步骤 2-F4IF_I…

浏览器中的 JavaScript 执行机制

思维导图 本文为反复学习极客时间-《浏览器的工作原理与实践》-浏览器中的 JavaScript 执行机制章节中的一些思考与记录。 一些重要概念 变量提升 所谓的变量提升&#xff0c;是指在 JavaScript 代码执行过程中&#xff0c;JavaScript 引擎把变量的声明部分和函数的声明部分…

你可能还不知道的 console.log 替代品

通过使用 javascript 对象的破坏能力&#xff0c;您可以这样做&#xff1a;const{ log } console; log("hi"); log("testing");你可以将log函数更改为您想要的任何其他名称&#xff0c;如下所示&#xff1a;const{log: myLog } console; myLog("hi&qu…

vue插槽 Slots

一、插槽是什么&#xff1f; 插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示, 父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的<slot></slot>标签。 简…

OpenSergo Spring Cloud Alibaba 带来的服务治理能力

作者&#xff1a;十眠、牧思 Spring Cloud 应用为何需要服务治理 随着微服务技术的发展&#xff0c;微服务(MicroServices) 的概念早已深入人心&#xff0c;越来越多的公司开始使用微服务架构来开发业务应用。 如果采用得当&#xff0c;微服务架构可以带来非常大的优势。微服…

IDEA与eclipse桌面配置基础(笔记)

在eclipse中配置jdk Window–>Preferences–>java–>installed JREs–>add–>Standard VM–>选择jdk安装路径就好了 设置字符集编码为utf-8&#xff0c;防止中文乱码 设置字符集编码为UTF-8&#xff1a;Window–>Preferences–>General–>Workspace…

第四次工业革命新十年:看跨越智能化鸿沟的联想范式

十年前&#xff0c;GE推出全球第一个工业互联网平台Predix&#xff1b;同年&#xff0c;在2013汉诺威工业博览会上&#xff0c;德国正式推出工业4.0概念。由此&#xff0c;全球开启了以工业4.0和工业互联网为核心的第四次工业革命浪潮&#xff0c;智能技术成为了第四次工业革命…

4N25光耦合器:简单的应用电路

4N25光耦合器&#xff1a;简单的应用电路 介绍 4N25是一款6引脚光电晶体管耦合器。本文根据其传动特性介绍了 4N25 的非线性和线性应用。 4N25概述 光电耦合器4N25的内部电路结构如图1所示。 图1.4N25内部电路结构 该芯片为双列直插式器件&#xff0c;外引线为6根&#xff0…

Dart语法学习-基础-类

Classes Using constructors 使用构造函数创建对象。 构造函数名称可以是 ClassName 或 ClassName.identifier。 例如&#xff0c;以下代码使用 Point() 和 Point.fromJson() 构造函数创建 Point 对象&#xff1a; class Point {var x;var y;Point(int this.x, int this.y);…

Java --- Integer.parseInt()

parseInt() 方法是java.lang 包下Integer 类的一个方法。 Java Integer parseInt() 方法共有三种不同类型&#xff0c;可以根据其参数进行区分。 用法: 以下是 parseInt() 方法的声明&#xff1a; public static int parseInt (String s) public static int parseInt (Strin…

捐赠物品管理系统-php mysql

目 录 第一章 引言 1 1.1研究背景 1 1.2研究现状 1 1.3 系统相关技术与环境简介 1 1.3.1 PHP 1 1.3.2 Apache 2 1.3.3 MySQL数据库 2 1.3.4 运行环境 Windows 3 1.3.5 appserv 3 1.3.6 Dreamweave8 3 1.3.7 EditPlus 4 第二章 需求分析…

前端必备开发编译器详解

一、前言 前端开发编译器有很多&#xff0c;例如&#xff1a;WebStorm、VS Code、HBuilder X、Sublime Text等等。在这里就不一一介绍了&#xff0c;这里主要讲解VS Code和HBuilder X 编译器。 二、VS Code Visual Studio Code (简称 VS Code) 是一款免费开源的现代化轻量级…

论文阅读:Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos

Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos 文章目录Tube Convolutional Neural Network (T-CNN) for Action Detection in Videos摘要及贡献相关工作Generalizing R-CNN from 2D to 3D框架结构Tube Proposal Network&#xff08;TPN&#xff…

leetcode刷题之背包问题(01背包)

01 背包 概念&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]weight[i]weight[i]&#xff0c;得到的价值是value[i]value[i]value[i]。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 方法1&#xff1a;暴力回溯…

综合办公系统(OA+HR+CRM)

综合办公管理系统是集OA办公系统、HR人力资源管理系统和CRM客户关系管理系统于一体的综合系统。 其架构为&#xff1a; 功能介绍 一、OA办公系统 OA办公系统主要包括个人办公、会议室管理、车辆管理、新闻公告、资产管理和文档管理模块 &#xff08;1&#xff09;个人办公 内部…

6年软件测试经历:成长、迷茫、奋斗

前言 测试工作6年&#xff0c;经历过不同产品、共事过不同专业背景、能力的同事&#xff0c;踩过测试各种坑、遇到过各种bug。测试职场生涯积极努力上进业务和技术能力快速进步过、也有努力付出却一无所得过、有对测试生涯前景充满希望认为一片朝气蓬勃过、也有对中年危机思考不…

【笔记】移动端自动化:adb调试工具+appium+UIAutomatorViewer

学习源&#xff1a; https://www.bilibili.com/video/BV11p4y197HQ https://blog.csdn.net/weixin_47498728/category_11818905.html 一、移动端测试环境搭建 学习目标 1.能够搭建java 环境 2.能够搭建android 环境 &#xff08;一&#xff09;整体思路 我们的目标是Andr…

小红书情人节大赏!热门话题各出奇招,看看哪个品牌打动了你?

情人节热度狂飙&#xff0c;实时热度值破万 以爱之名&#xff0c;传递爱意。每年情人节向来是不容错过的热门话题。我们发现&#xff0c;临近情人节&#xff0c;小红书平台的相关内容热度飙升。据千瓜数据关键词热度查询&#xff0c;2月初“情人节”热搜词热度值就已破万。 截止…