广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringCloudFeign客户端使用流程
  • 556
分享到

SpringCloudFeign客户端使用流程

SpringCloudFeign原理SpringCloudFeign使用 2023-01-31 15:01:54 556人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一.Http客户端Feign1.1RestTemplate方式调用存在的问题1.2Feign的介绍1.3Feign的使用1.4自定义Feign的配置1.5Feign性能优化1.6

一.HTTP客户端Feign

1.1RestTemplate方式调用存在的问题

以前我用使用RestTemplate发起远程调用的代码:

String url = "http://userservice/user/" + order.getUserId();

User user = restTemplate.getForObject(url, User.class);

存在的问题:

①代码可读性差,编程体验体验不统一

②参数复杂的URL难以维护

1.2Feign的介绍

Feign是一个声明式的http客户端,官方地址:https://GitHub.com/OpenFeign/feign

其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

1.3Feign的使用

①书接上文,在orderservice中引入依赖

  <!--feign客户端依赖-->
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-openfeign</artifactId>
   </dependency>

②在启动类上添加注解开启Feign的功能

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients #开启Feign功能
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

③编写Feign客户端

新建一个接口,使用@FeignClient注解指定是哪个微服务。下面的与Controller写法类似对应

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

主要是基于springMVC的注解来声明远程调用的信息,比如:

服务名称:userservice

请求方式:GET

请求路径:/user/{id}

请求参数:Long id

返回值类型:User

④用Feign客户端代替RestTemplate

在orderservice中,更改之前我们使用的RestTemplate

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private UserClient userClient;
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.用feign远程调用
        User user = userClient.findById(order.getUserId());
        //3.封装user到Order里
        order.setUser(user);
        // 4.返回
        return order;
    }
}

⑤重启orderservice,访问,查看效果

⑥小结

Feign的使用步骤

引入依赖

添加@EnableFeignClients注解

编写FeignClient接口

使用FeignClient中定义的方法代替RestTemplate

1.4自定义Feign的配置

Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:

配置Feign日志的两种方式

①配置文件方式

全局生效:

feign:

client:

config:

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

局部生效:

feign:

client:

config:

userservice: # 写服务名称,则是针对某个微服务的配置

loggerLevel: FULL # 日志级别

②java代码方式

首先需要声明一个Bean

public class FeignClientConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC;
}
}

如果要使用全局配置,把他放到@EnableFeignClients这个注解中

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)

如果要使用局部配置,把他放到@FeignClient这个注解中

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class)

③小结

Feign的日志配置:

方式一是配置文件,feign.client.config.xxx.loggerLevel

如果xxx是default则代表全局

如果xxx是服务名称,例如userservice则代表某服务

方式二是java代码配置Logger.Level这个Bean

如果在@EnableFeignClients注解声明则代表全局

如果在@FeignClient注解中声明则代表某服务

1.5Feign性能优化

Feign底层的客户端实现:

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

Apache HttpClient :支持连接池

OKHttp:支持连接池

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

使用连接池代替默认的URLConnection

日志级别,最好用basic或none

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

Feign添加HttpClient的支持:

①引入依赖

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

②配置连接池

feign:
  httpclient:
    enabled: true #支持httpclient
    max-connections: 200 #最大连接数
    max-connections-per-route: 50 #单个请求路径最大连接数

③小结

Feign的优化:

日志级别尽量用basic

使用HttpClient或OKHttp代替URLConnection

引入feign-httpClient依赖

配置文件开启httpClient功能,设置连接池参数

1.6Feign的最佳实践

将FeignClient抽取为独立模块,并且将与接口相关的POJO、默认的Feign配置都放在这个模块,提供给所有消费者使用

①新建一个模块,明明为feign(自定义)

②导入有关依赖

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

③将pojo、配置类、Feign的接口复制到feign模块里

④orderservice中导入feign模块的依赖

<dependency>
    <groupId>cn.itcast.demo</groupId>
    <artifactId>feign</artifactId>
    <version>1.0</version>
</dependency>

⑤将orderservice中有关feign调用的包都改成模块的

⑥重启测试

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

方式一:指定FeignClient所在包

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")

方式二:指定FeignClient字节码

@EnableFeignClients(clients = {UserClient.class})

到此这篇关于SpringCloud Feign客户端使用流程的文章就介绍到这了,更多相关SprinGCloud Feign内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringCloudFeign客户端使用流程

本文链接: https://www.lsjlt.com/news/193737.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringCloudFeign客户端使用流程
    目录一.HTTP客户端Feign1.1RestTemplate方式调用存在的问题1.2Feign的介绍1.3Feign的使用1.4自定义Feign的配置1.5Feign性能优化1.6...
    99+
    2023-01-31
    SpringCloud Feign原理 SpringCloud Feign使用
  • 使用.NETMAUI开发ChatGPT客户端的流程
    目录开发实战托盘图标(右键点击有 menu)WebView【重点】js 和 csharp 互相调用chatgpt 的开放 api 调用最近 chatgpt 很火,...
    99+
    2022-12-21
    .NET MAUI 开发 ChatGPT .NET MAUI 开发
  • Trojan客户端使用教程
    Trojan客户端使用教程 此教程使用的是 Centos7 x86_64系统 1.开启Trojan客户端代理服务 使用此命令下载Trojan客户端 官方版本(GitHub): cd /usr/sr...
    99+
    2023-09-01
    linux 服务器 windows
  • Go gRPC服务客户端流式RPC教程
    目录前言情景模拟:客户端大量数据上传到服务端新建proto文件创建Server端创建Client端思考总结前言 上一篇介绍了服务端流式RPC,客户端发送请求到服务器,拿到一个流去读取...
    99+
    2022-11-13
  • Netty客户端接入流程NioSocketChannel创建解析
    目录NioSocketChannel的创建回到上一小节的read()方法我们首先看readBufjdk底层相关的内容跟到父类构造方法中我们跟进其构造方法前文传送门:Netty客户端处...
    99+
    2022-11-13
  • Netty客户端接入流程NioSocketChannel怎么创建
    这篇文章主要为大家展示了“Netty客户端接入流程NioSocketChannel怎么创建”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Netty客户端接入流程NioSocketChannel怎...
    99+
    2023-06-29
  • openvpn linux客户端使用
    内网服务器是linux的,需要连接openvpn,访问线上的应用服务。需要安装客户端,方法和服务器类似。客户端和服务器端需要保持时间同步,这一点要特别说明一下,如果时间不同步,客户端是无法连接服务器的linux同步北京时间 # y...
    99+
    2023-01-30
    客户端 openvpn linux
  • openvpn mac客户端使用
    1.安装Tunnelblick【OpenVPN客户端】Mac上使用OpenVPN,需要安装Tunnelblick【OpenVPN客户端】下载地址:https://tunnelblick.net/downloads.html下载稳定版本安装应...
    99+
    2023-01-30
    客户端 openvpn mac
  • openvpn windows客户端使用
    下载这个OpenVPN目前需要 翻 墙 在Google中搜索官网的下载地址,百度现在搜索不到了,在Google Chrome中搜索OpenVPN:https://openvpn.net/index.php/open-source/downl...
    99+
    2023-01-30
    客户端 openvpn windows
  • 关于UDP服务器客户端编程流程介绍
    目录UDP编程流程UDP服务端代码实现UDP客户端代码实现UDP服务端客户端代码详解UDP编程流程 UDP提供的是无连接、不可靠的、数据报服务 UDP是尽最大能力进行传输,但是并不...
    99+
    2022-11-12
  • Netty分布式客户端接入流程是什么
    这篇文章主要介绍了Netty分布式客户端接入流程是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Netty分布式客户端接入流程是什么文章都会有所收获,下面我们一起来看看吧。第一节:初始化NioSockect...
    99+
    2023-06-29
  • PHP开发API客户端之接口调用流程浅析
    当开发Web应用程序时,经常需要在应用程序中使用其他服务或应用程序提供的功能。在这种情况下,我们之间通过接口进行通信并获取所需的信息或执行所需的操作。在本文中,我们将关注使用PHP编写API客户端的开发者所需了解的接口调用流程。步骤1:使用...
    99+
    2023-05-14
  • VNC的客户端,VNC的客户端哪个好用
    IIS7服务器管理工具能够作为VNC的客户端,进行VNC的命令操作,可在客户端,下载,安装VNC软件!同时,它也可以作为FTP的客户端,进行FTP的命令操作!它能够批量连接Windows和Linux系统下的服务器和VPS,并能够实时监测他们...
    99+
    2023-06-04
  • UDP服务器客户端编程流程的示例分析
    这篇文章给大家分享的是有关UDP服务器客户端编程流程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。UDP编程流程UDP提供的是无连接、不可靠的、数据报服务UDP是尽最大能力进行传输,但是并不能保证可靠性...
    99+
    2023-06-21
  • 常见WebShell客户端的流量特征
    以下的全是我在各个大佬哪里看文章做的总结-相当于我的笔记 中国蚁剑(AntSword) 大佬文章地址 https://www.cnblogs.com/NoCirc1e/p/16275608.htmlhttps://www.cnblogs.c...
    99+
    2023-09-01
    php 服务器 html
  • Node.js编程中客户端Session的使用详解
    静态网站很容易扩展。你只需要全部缓存,不需要考虑从不同服务器组合有状态的内容给用户。 可惜,大多数Web应用使用有状态的内容提供个性化体验。如果你的应用可以登录,就需要记住用户的Session。经典的处理...
    99+
    2022-06-04
    详解 客户端 Node
  • MySQL mysqladmin客户端的使用简介
         mysqladmin是MySQL官方提供的shell命令行工具,它的参数都需要在shell命令行里面执行,当我们使用mysqladmin的时候,必须指定两类参数,一类...
    99+
    2022-05-25
    MySQL mysqladmin客户端 MySQL mysqladmin客户端使用
  • linux 中如何使用svn客户端
    今天就跟大家聊聊有关linux 中如何使用svn客户端,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、将文件checkout到本地目录 svncheckoutpath(path是服...
    99+
    2023-06-13
  • Python asyncore socket客户端开发基本使用教程
    目录介绍1.定义类并且继承 asyncore.dispatcher2.实现类中的回调代码调用父类方法创建 socket 对象连接服务器3.创建对象并且执行 asyncore.loop...
    99+
    2022-12-26
    Python asyncore socket使用 Python asyncore socket Python asyncore 
  • C#之Socket客户端全过程
    目录C#开发Socket客户端C#Socket客户端异步实现简易封装使用未实现的几个常用操作总结C#开发Socket客户端 我们先新建一个类:SocketClientAsync。 注...
    99+
    2023-05-19
    C#Socket客户端 C# Socket Socket客户端
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作