Feign实现远程接口的调用

news2024/9/25 17:22:10

Feign实现远程接口的调用

  • 前言
  • 一、Fegin是什么?
  • 二、Feign使用步骤
    • 准备工作
      • 被调用的远程服务必须上传到nacos/eureka服务中心进行管理配置,比如我调用media-api服务(媒资管理服务),那么media-api必须被nacos/eureka所管理。如图,都注册到配置中,并且启动起相关的服务。
      • 在启动类添加feign的注解
    • 1.引入依赖
    • 2.配置好feign
    • 3.创建好feign的客户端,用于引入远程服务的接口
    • 4.进行远程调用,注入对应的远程调用客户端


前言

在自己跟着做项目过程中,对springcloud中的feign实现远程调用不太熟悉,故记录一下


一、Fegin是什么?

Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解.Feign也支持可拔插式的编码器和解码器.Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters.Feign可以与EurekaRibbon组合使用以支持负载均衡.

二、Feign使用步骤

准备工作

被调用的远程服务必须上传到nacos/eureka服务中心进行管理配置,比如我调用media-api服务(媒资管理服务),那么media-api必须被nacos/eureka所管理。如图,都注册到配置中,并且启动起相关的服务。

在这里插入图片描述

在启动类添加feign的注解

如果我1服务远程调用2服务,我需要在1服务配置feign的相关注解
在这里插入图片描述
代码如下:

@EnableFeignClients(basePackages={"com.xuecheng.content.feignClient"}) //如果feign注册的服务器不跟启动类同一个包,需要配置所在的包名
@SpringBootApplication

1.引入依赖

 <!-- Spring Cloud 微服务远程调用 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2.配置好feign

代码如下(示例):

spring:
  application:
    name: content-api #服务名
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://192.168.101.65:3306/xyh_content?serverTimezone=UTC&userUnicode=true&useSSL=false&
#    username: root
#    password: mysql
    
  cloud:
    nacos:
      server-addr: 192.168.101.xx:8848 #nacos服务端口号
      discovery:
        namespace: xyh_dev #nacos空间名称
        group: xuecheng-plus-project #nacos组名
      config:
        namespace: xyh_dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        extension-configs: #扩展配置,只有自己服务进行配置
          - data-id: content-service-${spring.profiles.active}.yaml
            group: xuecheng-plus-project
            refresh: true 
          - data-id: search-${spring.profiles.active}.yaml #这个是els全文索引的配置
            group: xuecheng-plus-project
            refresh: true
        shared-configs: #共享配置,所有服务都需要用的放在共享配置
          #- data-id: swagger-${spring.profiles.active}.yaml #这个是swagger的配置
            #group: xuecheng1-common
            #refresh: true
          - #data-id: logging-${spring.profiles.active}.yaml #这个是日志的配置
            #group: xuecheng1-common
            #refresh: true
          #- data-id: freemarker-config-${spring.profiles.active}.yaml  #这个是freemarker文件渲染配置
            #group: xuecheng1-common
            #refresh: true
          - data-id: feign-${spring.profiles.active}.yaml #这个是我们的feign的配置
            group: xuecheng1-common
            refresh: true
  profiles:
    active: xyh_dev #环境名

咱们的服务中的配置文件需要去找nacos中feign的配置:
在这里插入图片描述

feign:
  hystrix:
    enabled: true
  circuitbreaker:
    enabled: true
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 30000  #熔断超时时间
ribbon:
  ConnectTimeout: 60000 #连接超时时间
  ReadTimeout: 60000 #读超时时间
  MaxAutoRetries: 0 #重试次数
  MaxAutoRetriesNextServer: 1 #切换实例的重试次数

3.创建好feign的客户端,用于引入远程服务的接口

例如:远程调用媒资服务中的上传文件接口

//远程调用媒资服务接口 value:远程服务在nacos上的配置名称 fallbackFactory熔断降级调用的类
@FeignClient(value = "media-api",configuration = {MultipartSupportConfig.class},fallbackFactory = com.xuecheng.content.feignClient.MediaServiceClientFallbackFactory.class)
public interface  MediaServiceClient {
	//直接使用restful类型调用媒资管理服务下面对应的接口
    @RequestMapping(value = "/media/upload/coursefile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String uploadFile(@RequestPart("filedata") MultipartFile upload, @RequestParam(value = "objectName",required=false) String objectName);

}

我们还需要注册一个熔断降级的类,我们自己定义,如果客户端返回null说明远程调用时发生了熔断降级

@Slf4j
@Component
public class MediaServiceClientFallbackFactory implements FallbackFactory<MediaServiceClient> {
    @Override
    public MediaServiceClient create(Throwable throwable) {
        return new MediaServiceClient() {
            @Override
            public String uploadFile(MultipartFile upload, String objectName) {
                //降级方法
                log.debug("调用媒资管理服务上传文件时发生熔断,异常信息:{}",throwable.toString(),throwable);
                return null;
            }
        };
    }
}

4.进行远程调用,注入对应的远程调用客户端

在这里插入图片描述
进行接口的调用:

在这里插入图片描述

到此,我们的feign远程调用接口的实现就完成了

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

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

相关文章

CentOS7和主机Win11不能复制粘贴解决之道及CentOS7最小安装版 VMware Tools安装

入世心法&#xff1a; 金字塔 结构化 系统化 底层认知 认知升级 来认识下你老祖宗 底层逻辑 分别从: ---->道|法|术|器|势<--- 这五个层次去打通............................翻新思维底层认知&#xff…

【CSS】跳动文字

文章目录 效果展示代码实现 效果展示 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>一颗不甘坠落的流星</title></head><style type"text/css">/* 遮罩盒子样式 */#mask {/* 设…

基于单片机的蓝牙音乐喷泉的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;通过HM-18蓝牙音频模块进行无线传输&#xff1b; 通过LM386功放模块对音频信号进行放大&#xff1b;手机端可以直接控制音频播放&#xff0c;并且最远距离可达20米&#xff1b;手机端可以进行任意音乐切换&#xff0c;播报、暂停&a…

Python 图像文件压缩,使用PIL库对图像进行等比例压缩

题目 图像文件压缩。使用PIL库对图像进行等比例压缩&#xff0c;无论压缩前文件大小如何&#xff0c;压缩后文件大小小于10KB。 代码 from PIL import Image import os from tkinter import filedialog import tkinterf_path filedialog.askopenfilename() image Image.op…

第三章:L2JMobius学习 – 使用eclipse2023创建java工程

在前两个章节中&#xff0c;我们已经安装了mariadb数据库和jdk&#xff0c;本章节我们安装eclipse2023。eclipse作为老牌的java开发工具&#xff0c;真的是不错的。官方下载地址为&#xff1a; https://www.eclipse.org/downloads/download.php?file/technology/epp/download…

STM32的ADC模式及其应用例程介绍

STM32的ADC模式及其应用例程介绍 &#x1f4cd;ST官方相关应用笔记介绍资料&#xff1a;https://www.stmcu.com.cn/Designresource/detail/application_note/705947&#x1f4cc;相关例程资源包&#xff1a;STSW-STM32028&#xff1a;https://www.st.com/zh/embedded-software/…

MySQL---表数据高效率查询(简述)

目录 前言 一、聚合查询 &#x1f496;聚合函数 &#x1f496;GROUP BY子句 &#x1f496;HAVING 二、联合查询 &#x1f496;内连接 &#x1f496;外连接 &#x1f496;自连接 &#x1f496;子查询 &#x1f496;合并查询 &#x1f381;博主介绍&#xff1a;博客名…

NXP文档AN13000解读-基于S32K116的无感BLDC六步换相控制策略(预定位/开环启动/反电动势过零点检测)

目录 六步换相控制 单极性PWM 反电动势过零点检测技术 反电动势的测量 总线电流的测量 电机状态切换 Alignment Start-up Run 算法用到的各模块 各模块间的连接 ADC触发顺序 芯片的初始化 时钟配置与电源管理 FTM Trigger MUX Control (TRGMUX) PDB ADC LPS…

【Git原理与使用】-- 多人协作

目录 多人协作一&#xff08;多人同一分支&#xff09; 开发者一&#xff08;Linux&#xff09; 开发者二&#xff08;Windous&#xff09; master合并 远端上的合并 本地上的合并 总结 多人协作一&#xff08;多人多分支&#xff09; 开发者一&#xff08;Linux&…

SQL Server数据库忘记了sa密码怎么办 亲测真的可用

我们在安装SQL Server数据库时&#xff0c;往往选择混合模式安装&#xff0c;在这里我们可以设置sa密码。混合模式安装后&#xff0c;我们可以通过Windows身份验证和SQL Server身份验证两种方式登陆。 如果sa密码忘记了&#xff0c;我们就无法用SQL Server身份验证登陆了。 那么…

【高性能、高并发】页面静态化解决方案-OpenResty

OpenResty OpenResty介绍 OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项 用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关 OpenResty通过汇聚各种设计精良的…

Python应用实例(一)外星人入侵(五)

外星人入侵&#xff08;五&#xff09; 1.项目回顾2.创建第一个外星人2.1 创建Alien类2.2 创建Alien实例 3.创建一群外星人3.1 确定一行可容纳多少个外星人3.2 创建一行外星人3.3 重构_create_fleet()3.4 添加行 在游戏《外星人入侵》中添加外星人。我们将首先在屏幕上边缘附近…

RHCE中级项目

一、项目需求 1、在 bbs.example.com 主机上创建 Discuz 论坛&#xff0c;数据库服务器使用 db.example.com 主机的 bbs 数据库实例&#xff0c;该实例由 MySQL数据库软件提供服务。 2、在 ntp.example.com 主机上创建 NTP 服务&#xff0c;该服务由 Chronyd软件提供服务&…

GoLang网络编程:HTTP服务端之底层原理与源码分析——http.HandleFunc()、http.ListenAndServe()

一、启动 http 服务 import ("net/http" ) func main() {http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte("ping...ping..."))})http.ListenAndServe(":8999", nil) }在 Golang只需要几行代…

第三章 SSD存储介质:闪存 3.4

3.4 闪存数据完整性 可采用以下数据完整性的技术确保用户数据不丢失&#xff1a; &#xff08;1&#xff09;ECC纠错&#xff1b; &#xff08;2&#xff09;RAID数据恢复&#xff1b; &#xff08;3&#xff09;重读&#xff08;Read Retry&#xff09;&#xff1b; &#xff…

C/C++指针从0到99(详解)

目录 一&#xff0c;指针的基础理解 二&#xff0c;指针的基本使用 三&#xff0c;为什么要用指针 四&#xff0c;指针与数组的联系 五&#xff0c;指针的拓展使用 1&#xff09;指针数组 2)数组指针 3&#xff09;函数指针 结构&#xff1a;返回类型 &#xff08;*p)…

我国新能源汽车存量已突破1620万辆,登记数量创历史新高

根据公安部发布的最新数据&#xff0c;截至2023年6月底&#xff0c;全国的机动车数量达到4.26亿辆&#xff0c;其中汽车数量为3.28亿辆&#xff0c;新能源汽车数量为1620万辆。与此同时&#xff0c;机动车驾驶人口达到5.13亿人&#xff0c;其中汽车驾驶人口为4.75亿人。在2023年…

Zabbix监控软件 Linux外多平台监控【Windows JAVA SNMP】

在之前的博客中&#xff0c;已经介绍了zabbix的安装&#xff0c;配置&#xff0c;以及如何用zabbix监控Linux服务器。这篇博客则介绍zabbix监控的其他几种方式&#xff08;Windows服务器 Java应用 SNMP&#xff09;。 -------------------- Zabbix 监控 Windows 系统 ---------…

传统图像处理之图像美化——图像金字塔

代码实战&#xff1a;图像融合 我将肯巴.沃克和约翰.沃尔融合在了一起。 具体见注释。 import numpy as np import cv2 import scipy.ndimage as ndimageimg cv2.imread("1.png")img1 cv2.imread("2.png")imgcv2.resize(img,(192,192)) img1cv2.resiz…

JVM调优的相关命令

在进行JVM调试时&#xff0c;熟练使用Linux和Java命令是非常重要的&#xff0c;有利于我们快速发现问题&#xff0c;并进行解决。平时常用的命令有&#xff1a;Linux的Top、Top -Hp等&#xff1b;Java的Jps、Jinfo、Jstack、Jstat、Jmap、Jhat等。下面&#xff0c;我将逐一介绍…