在Spring Cloud中实现Feign声明式服务调用客户端

如果你学过Spring Cloud,你应该知道我们可以通过OpenFeign从一个服务中调用另一个服务,我们一般采用的方式就是定义一个Feign接口并使用@FeignClient注解来进行标注,feign会默认为我们创建的接口生成一个代理对象。

当我们在代码中调用Feign接口的方法的时候,实际上就是在调用我们Feign生成的代理对象的方法,代理对象会根据接口定义的方法信息,将我们的请求转发到相应的代码提供者。

然后Feign会根据接口方法的注解信息,进行构建HTTP请求,并将相关请求发送给服务提供者,目前Feign支持多种HTTP请求,包括但不限于GET,POST等,并且支持请求参数,请求头等的配置。

服务提供者接收到请求后,根据请求路径和参数等信息,执行相应的业务逻辑,并将相关结果返回给Feign客户单,至此,Feign客户端接收到服务提供者的响应后,将响应结果返回给调用方。

接下来,请跟着我的步骤进行完成,注意本案例,是在博主Spring Cloud系列中进行的,如果你想跟着一起来,不妨先看前几篇文章把框架搭建好。

首先我们启动相关服务,其中本案例将用到主要的三个服务如下:
EurekaApplication,EurekaClientApplication,FeignApplication。

在这里插入图片描述
启动服务之后,我们在Feign直接调用EurekaClientApplication中的接口,首先,我们就在启动类里边添加相关注解:

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class FeignApplication
{
    public static void main( String[] args )
    {
        SpringApplication.run(FeignApplication.class);
    }
}

然后创建一个DcClient接口:

@FeignClient("eureka-client")
public interface DcClient {

    @GetMapping("/dc")
    String consumer();

}

那么我们应该在那里调用这个接口呢?

我们直接通过控制层进行调用:创建一个DcController控制类:

@RestController
public class DcController {

    @Autowired
    DcClient dcClient;

    @GetMapping("/consumer")
    public String dc() {
        return dcClient.consumer();
    }
}

然后重启FeignApplication。通过访问
localhost:2380/consumer
出现如下图所示信息,代表你成功在Feign服务中调用到EurekaClient模块中的DcController,让我们看看EurekaClient模块中的DcController:

@RestController
public class DcController {

    @Autowired
    DiscoveryClient discoveryClient;

    @GetMapping("/dc")
    public String dc() {
        String services = "Services: " + discoveryClient.getServices();
        System.out.println(services);
        return services;
    }
}

在这里插入图片描述
我们发现启动的服务如上:
Services: [zuul-demo, hystrix-demo, ribbon-demo, eureka-client, feign-demo]
在这里插入图片描述来对照一下发现,我们启动的服务均在localhost:1000中可以见。我们可以同@FeignClient定义的接口来统一申明我们需要依赖的微服务接口,通过我们上述的方式进行,让我们可以在具体使用的时候,跟着调用本地方法一样的进行调用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode143 重排链表

重排链表 题解1 线性表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值,而是需要实际…

【Week P1】 MNIST手写数字识别

文章目录 一、环境配置1.1 安装环境1.2 设置环境,开始本文内容 二、准备数据三、搭建网络结构四、开始训练五、查看训练结果六、总结2.1 ⭐ torchvision.datasets.MNIST详解(Line4 & Line9)2.2 ⭐ torch.utils.data.DataLoader详解(Line4 & Line9)2.3 ⭐ sq…

C类核心论文复现:基于电力系统碳排放流理论的碳排放分摊模型研究程序代码!

本程序参考中文核心论文《基于电力系统碳排放流理论的碳排放分摊模型研究》,文中运用潮流追踪对系统网损引起的碳排放进行分配定量,最后得到系统实时碳排放的产权分配结果,程序较为简单和基础,具有较强的可扩展性和适用性&#xf…

路由器静态路由的配置

路由器静态路由的配置步骤如下: 进入系统视图。输入命令sys进入系统视图。配置路由器的接口IP地址。命令格式为int g0/0/0,其中g0/0/0表示路由器的接口,可以根据实际情况进行修改。然后使用命令ip add配置接口的IP地址。配置下一跳地址。在静…

【IDEA】IntelliJ IDEA创建一个Maven项目

在IDEA中创建Maven项目,前提是已经安装配置好Maven环境 。 本文主要使用的是IntelliJ IDEA 2022.2.1 (Community Edition) 1.创建一个新project:File>Project 2.修改Maven配置:File>Settings>搜索maven 创建好的工程如下: src/main…

应用在MiniLED电视领域中的MiniLED背光技术

众所周知,液晶技术发展至今仍旧无法避免自身的一些短板。随着消费升级等因素的影响,大家对于电视画质层面有了更高的需求与期待。所以在近的几年里,大厂们都在寻求能够替代LCD液晶的更优秀的显示技术。这其中,Mini LED势头惊人&am…

音乐制作软件Studio One mac软件特点

Studio One mac是一款专业的音乐制作软件,由美国PreSonus公司开发。该软件提供了全面的音频编辑和混音功能,包括录制、编曲、合成、采样等多种工具,可用于制作各种类型的音乐,如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件…

iOS应用程序签名、重签名及安装测试优化指南

iOS应用程序的签名、重签名和安装测试 ipa编译出来后,或者ipa进行修改后,需要进行重新签名才能安装到测试手机,或者提交app store供apple 商店审核上架。ipaguard有签名和重签名功能,能在windows,mac,和li…

opencv cpp的安装

搞了半天, 可算弄好了. vs opencv cpp: https://blog.csdn.net/weixin_50918736/article/details/130176469?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-130176469-blog-127627204.235%5Ev39%5Epc_relev…

QDialog子类的使用

背景: 我用Qt designer实现了如下效果: 但在实际使用的时候,发现OK和Cancel按钮点是点不动的。 解决方法: 需要手动添加相关信号槽函数: connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(accept()));connect…

C语言定长数组 变长数组 柔性数组

C语言定长数组 变长数组 柔性数组 文章目录 C语言定长数组 变长数组 柔性数组1. 定长数组2. 变长数组3. 柔性数组3.1 结构体的大小3.2 柔性数组的使用 1. 定长数组 在C99标准之前,C语言在创建数组的时候,数组的大小只能使用常量,常量表达式来…

后端只打印了info等级的日志?-SpringBoot日志打印-Slf4j

在调用log变量的方法来输出日志时,有以上5个级别对应的方法,从不太重要,到非常重要 调用不同的方法,就会输出不同级别的日志。 trace:跟踪信息debug:调试信息info:一般信息warn:警告…

一个最小的物联网系统设计方案及源码(一)——系统组成

关于物联网 物联网(Internet of Things,缩写IOT)是一个基于互联网、传统电信网等信息承载体,让所有能够被独立寻址的普通物理对象实现互联互通的网络。 物联网一般为无线网,由于每个人周围的设备可以达到一千至五千个&…

css选择器介绍

css选择器介绍 01 css概念介绍 用于更改标签的视觉效果 02 css格式 选择器 {属性1&#xff1a;值1&#xff1b;属性2&#xff1a;值2} 03 三种样式 1.内联样式 直接写在标签的style属性中。 优点&#xff1a;简单明显缺点&#xff1a;无法重复使用代码 <img src&quo…

【Pandas】时间序列数据按年聚合

想做什么 有一个时间序列数据&#xff0c;希望按财政年度而不只是按年对其进行汇总。 例如以下“账单信息”&#xff0c;并希望按财政年度对其进行总计。 import pandas as pd# 样本数据 data {计费月份: [2020-02-01, 2020-05-01, 2021-02-01, 2021-04-01],计费ID: [1, 2,…

MongoDB表的主键可以重复?!MongoDB的坑

MongoDB表的主键可以重复&#xff1f;&#xff01; 眼见为实&#xff1f; 碰到一个奇怪的现象&#xff0c; MongoDB的一个表居然有两个一样的_id值&#xff01; 再次提交时&#xff0c;是会报主键冲突的。那上图&#xff0c;为什么会有两个一样的_id呢&#xff1f; 将它们的…

Redis - 事务隔离机制

Redis 的事务的本质是 一组命令的批处理 。这组命令在执行过程中会被顺序地、一次性 全部执行完毕&#xff0c;只要没有出现语法错误&#xff0c;这组命令在执行期间是不会被中断。 当事务中的命令出现语法错误时&#xff0c;整个事务在 exec 执行时会被取消。 如果事务中的…

Linux中的堡垒机搭建以及使用

JumpServer搭建 安装应用包 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash 一路回车即可安装完毕&#xff08;可根据需求更改&#xff09; JumpServer的 配置文件路径 /opt/jumpserver/config/config.tx…

数字人er-nerf安装

目录 服务器环境 环境准备 1.下载源码 2.安装Ancoda环境 3.安装cudatoolkit 4.安装cuDNN 5.安装pytorch 6.安装requirements 7.安装tensorflow 8.安装pytorch3d 9.gcc安装 训练准备 训练 1.处理视屏 2.准备眨眼数据 3.头部训练 4.嘴唇 5.身体 6.生成推理音频…