SpringCloud(PS)远程调用--Feign

news2024/12/26 14:14:54

远程调用

  • RestTemplate远程调用
    • RestTemplate方式调用存在的问题
  • Http客户端Feign
    • 实现步骤
    • 自定义配置
    • Feign优化
      • Feign性能优化——连接池配置
    • 最佳实践

RestTemplate远程调用

    @Bean
//    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
 	@Autowired
    private RestTemplate restTemplate;

	String url = "http://userservice/user/"+order.getUserId();
    User user = restTemplate.getForObject(url, User.class);

RestTemplate方式调用存在的问题

  1. 代码可读性差,编程体验不统一
  2. 参数复杂,url难以维护

Http客户端Feign

概念: Feign是一个声明式的Http客户端
作用: 优雅的实现Http请求的发送,避免RestTemplate存在的问题

实现步骤

  • 引入依赖
<!--            Feign客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
  • 在order-service的启动类添加注解开启Feign的功能
@EnableFeignClients
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}
  1. 编写Feign客户端
@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

主要是基于SpringMVC的注解来声明远程调用的信息
- 服务名称:userservice
- 请求方式:GET
- 请求路径:/user/{id}
- 请求参数:Long id
- 返回值类型:User

  1. 使用
    @Autowired
    private UserClient userClient;
    
User user = userClient.findById(order.getUserId());

自定义配置

在这里插入图片描述1. 方式一:
在这里插入图片描述2. 方式二:在这里插入图片描述

Feign优化

Feign底层客户端原理:

  1. URLConnection:默认实现,不支持连接池
  2. Apache HttpClient:支持连接池
  3. OKHttp:支持连接池

Feign性能优化——连接池配置

  1. 方式一:Feign添加HttpClient的支持:

    • 引入依赖
    <!--        HttpClient-->
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-httpclient</artifactId>
            </dependency>
    
    • 配置连接池
    feign:
      client:
        config:
          default: #default 全局配置
            loggerLevel: BASIC # 日志级别,BASIC就是最基本的请求和响应信息
      httpclient:
        enabled: true # 开启feign对HttpClient的支持
        max-connections: 200 #最大连接数
        max-connections-per-route: 50 #每个路径的最大连接数
    

注意事项:

  1. 日志级别尽量用BASIC

  2. 使用HttpClient或者OKHttp代替URLConnection

    • 引入feign-httpClient依赖
    • 配置文件开启httpClient功能,设置连接池参数

最佳实践

  1. 方式一(继承):给消费者的FeignClient和提供者的Controller定义统一的父接口作为标准
    • 服务紧耦合
    • 父接口参数列表中的映射不会被继承9aa621aee0.png)

在这里插入图片描述

  1. 方式二(抽取):将FeignClient抽取为独立模块,并把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用

在这里插入图片描述
实现方式二:

  1. 创建一个mould,命名为feign-api,然后引入feign的starter依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
  1. 将order-service中编写到UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
  2. 在order-service中引入feign-api的依赖\
<!--        引入feign的统一api-->
        <dependency>
            <groupId>cn.itcast.demo</groupId>
            <artifactId>feign-api</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
  1. 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
  2. 重启测试

报错: 当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用

解决方式:

  1. 方式一:指定FeignClient所在包
@EnableFeignClients(basePackages = "cn.xxx.xxx.client")
  1. 方式二:指定FeignClient字节码
@EnableFeignClients(clients= {UserClient.class})

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

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

相关文章

linux基本功系列之fdisk命令实战

文章目录前言一. fdisk命令介绍二. 语法格式及常用选项三. 参考案例3.1 列出每个分区的大小3.2 分区操作3.2.1 添加硬盘3.2.2 开启虚拟机并分区3.3.3 分区完成后进行格式化挂载四 . 设置分区自动挂载前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文…

Elasticsearch7学习笔记(尚硅谷)

文章目录一、ElasticSearch概述1、ElasticSearch是什么2、全文搜索引擎3、ElasticSearch 和 Solr3.1 概述3.2 比较总结二、Elasticsearch入门1、Elasticsearch安装1.1 下载使用1.2 数据格式2、索引操作3、文档操作&#xff08;了解&#xff09;3.1 创建文档3.2 文档查询3.3 文档…

外贸谷歌优化,外贸google SEO优化费用是多少?

本文主要分享关于做外贸网站的谷歌seo成本到底需要投入多少这一件事。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 那么外贸google SEO优化费用是多少&#xff1f; 答案是&#xff1a;2w~25w。 好&#xff0c;看到这个答案先别激…

0.1opencv库VS环境配置

opencv环境配置 感谢大家学习这门教程。本系列文章首发于公众号【周旋机器视觉】。 这个这门课程的第一篇文章&#xff0c;主要是opencv环境配置。 本教程的环境为 Visual Studio 2019CMake 3.22.3opencv 4.6.0windows 10 1、opencv的源码下载与安装 直接访问opencv官网&…

Docker入门教程

文章目录一、Docker概述1. 什么是容器技术&#xff1f;2. 什么是Docker3. 为什么要使用Docker4. Docker和虚拟机的对比5. Docker相关概念6. DockerHub7. Docker架构二、安装Docker1. 安装Docker2. 配置阿里云镜像加速三、Docker常用命令1. 帮助命令2. 镜像操作命令3. 容器操作命…

mysql 8.0 忘记root密码-linux

vim /etc/my.cnf 在[mysqld]最后加上如下语句&#xff1a;skip-grant-tables 并保存退出有的配置是分开的&#xff0c;/etc/my.cnf.d/mysql-server.cnf重启mysql服务 : service mysqld restart免密码登陆: mysql -u root -ppassword校验直接回车select host, user, authenticat…

C#:Krypton控件使用方法详解(第七讲) ——kryptonHeader

今天介绍的Krypton控件中的kryptonHeader&#xff0c;下面开始介绍这个控件的属性&#xff1a;控件的样子如上图所示&#xff0c;从上面控件外观来看&#xff0c;这个控件有三部分组成。第一部分是前面的图片&#xff0c;第二部分是kryptonHeader1文本&#xff0c;第三部分是控…

前端学习第一阶段-第7章 品优购电商项目

7-1 品优购项目介绍及准备工作 01-品优购项目导读 02-网站制作流程 03-品优购项目规划 04-品优购项目搭建 05-品优购项目-样式的模块化开发 06-品优购项目-favicon图标制作 07-品优购项目-TDK三大标签SEO优化 7-2 首页Header区域实现 08-品优购首页-快捷导航shortcut结构搭建 0…

MySQL(三):切分,主从复制,读写分离

文章目录一、切分水平切分垂直切分水平切分策略二、主从复制三、读写分离一、切分 水平切分 水平切分又称为sharding,它是将同一个表中的记录拆分到多个结构相同的表中。当一个表的数据不断增多的时候&#xff0c;sharding是必然的选择&#xff0c;它可以将数据分布到集群的不…

jmap监控工具

在一个JVM进程中会存在有多个对象实例,如果要想获取所有对象的信息,就可以通过JDK提供的jmap工具完成,另外使用该工具还可以直接获取到指定进程的堆内存使用信息,开发者可以通过jmap --help 命令查看该命令相关的参数。 1、查看JVM进程中的对象信息 导致JVM性能问题的核心…

力扣sql简单篇练习(十九)

力扣sql简单篇练习(十九) 1 查询结果的质量和占比 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 用count是不会统计为null的数据的 SELECT query_name,ROUND(AVG(rating/position),2) quality,ROUND(count(IF(rating<3,rating,null))/count(r…

九龙证券|欧美充电桩市场快速增长 国内“桩企”出海需求旺盛

海外充电桩毛利率水平高、需求增加速&#xff0c;“桩企”出海继续。 在阿里世界站上接连三年火爆的新能源出口行业&#xff0c;本年坚持高增加下&#xff0c;涌现出新商机——新能源车充电桩。阿里世界站最新跨境指数显现&#xff0c;曩昔一年新能源车充电桩的海外商机快速增加…

SpringBoot11:分布式Dubbo、Zookeeper

什么是分布式系统&#xff1f; 建立在网络之上的软件系统&#xff0c;是若干个独立的计算机的集合&#xff0c;但是对用户来说&#xff0c;就像单个系统一样。可以利用更多的机器&#xff0c;处理更多的数据 注意&#xff1a;只有当单个节点不够用的时候&#xff0c;才需要考…

杭州电子科技大学2023年MBA招生考试成绩查询和复查申请的通知

根据往年的情况&#xff0c;2023杭州电子大学MBA考试初试成绩可能将于2月21日公布&#xff0c;最早于20号出来&#xff0c;为了广大考生可以及时查询到自己的分数&#xff0c;杭州达立易考教育为大家汇总了信息。根据教育部和浙江省教育考试院关于硕士研究生招生考试工作的统一…

volatile 关键字的使用

写博客的目的第一是做笔记&#xff0c;第二是在错误的基础上不断刷新认知&#xff0c;这两天会写三篇关于嵌入式容易混淆的知识点&#xff0c;有错误欢迎拍砖&#xff01; 1、volatile关键字的使用 关于volatile 关键字&#xff0c;如果你的理解仅仅是讲“是从内存直接取数据…

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置&#xff08;1&#xff09;开开启日志服务&#xff08;2&#xff09;特定域名使用自定义 DNS 服务器&#xff08;3&…

K8s集群部署(二进制安装部署详细手册)

一、简介 K8s部署主要有两种方式&#xff1a;1、Kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 2、二进制 从github下载发行版的二进制包&#xff0c;手动部署每个组件&#xff0c;组成Kubernetes集群…

SSM项目搭建保姆级教程

文章目录1、什么是SSM框架1.1、持久层1.2、业务层1.3、表现层1.4、View层1.5、SpringMVC执行流程1.6、MyBatis2、SSM实战搭建2.1、创建工程2.2、添加依赖2.3、配置spring.xml文件2.4、配置web.xml文件2.5、log4j.properties2.6、准备表2.7、实体类2.8、mapper2.9、service2.10、…

GuLi商城-SpringCloud-OpenFeign测试远程调用

1. Feign 简介 Feign 是一个声明式的 HTTP 客户端&#xff0c;它的目的就是让远程调用更加简单。Feign 提供了HTTP请 求的模板&#xff0c;通过编写简单的接口和插入注解&#xff0c;就可以定义好 HTTP 请求的参数、格式、地址等信 息。Feign 整合了 Ribbon&#xff08;负载…

操作系统 二(进程管理)

一、进程的定义及特征进程的定义由程序、数据、进程控制块三部分组成为了使程序可以并发执行&#xff0c;且可以对并发执行的程序加以描述和控制。不同角度的定义&#xff1a;进程是程序的一次执行&#xff1b;进程是一个程序及其数据在处理机上顺序执行时所发生的活动&#xf…