第五章 SpringCloud 使用Feign调用服务

SpringCloud使用feign调用下载文件服务 SpringCloud是当下最流行的分布式服务解决方案之一,是微服务架构的集大成者,将一系列优秀的组件进行了整合。SpringCloud基于springboot构建,对于使用过SpringBoot的同学来说,上手比较容易。 今天学习一下 使用feign跨服务文件下载。 一. 服务提供者 集成Easyexcel实现读入数据(ExcelUtil,easyExcel集成可参考快速入门,使用EasyEx... 阅读详情
1.项目概要介绍
在第三章和第四章的学习中,我们已经掌握了通过RestTemplate负载均衡机制来调用注册中心中的服务,除了RestTemplate外,SpringCloud还提供了另一个强大的组件Feign,这让客户端开发人员的编码更加简洁高效。
本章节的代码将以第四章的完整代码为基础进行feign改造实现
2.服务调用者user-service
feign是工作在服务调用者一方的,因此只要改造user-service工程,将其中通过RestTemplate调用message服务的部分改造成feign即可
a)添加Feign依赖
springcloud-user工程
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

b)项目中启用Feign
在UserApplication主函数类上添加@EnableFeignClients

c)编写FeignClient服务
新增一个接口 com . pachiraframework . springcloud . user . service .MessageService
接口使用@FeignClients注解进行标注,注解中接受一个参数,标示出客户端要调用的注册中心中服务的id,用于创建Ribbon负载均衡器
接口中的方法和服务提供者中的定义保持一致,注意,这里我们调用的是SmsController中的send2方法,因为这个方法的接收参数添加了@RequestBody参数

package com.pachiraframework.springcloud.user.service;

import java.util.Map;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.pachiraframework.springcloud.user.controller.UserController.SmsSendResponse;

import lombok.Data;

@FeignClient("message-service")
public interface MessageService {
@RequestMapping(method=RequestMethod.POST,value="/message/sms/send2")
public ResponseEntity<SmsSendResponse> send(SmsSendRequest request);
@Data
public static class SmsSendRequest {
/**
* 短信模版ID
*/
private String templateId;
/**
* 要发送的手机号
*/
private String mobile;
/**
* 模版中携带的参数信息
*/
private Map<String, Object> params;
}
}
d)调用方UserController改造
新增一个regist/sms2方法,用于和先前的基于RestTemplate方法调用区分开

具体代码内容如下
package com.pachiraframework.springcloud.user.controller;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.pachiraframework.springcloud.user.service.MessageService;
import com.pachiraframework.springcloud.user.service.MessageService.SmsSendRequest;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
@RequestMapping("/user/")
public class UserController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private MessageService messageService;
@RequestMapping(value= {"regist/sms"})
public ResponseEntity<SmsSendResponse> sms(String mobile){
Random random = new Random();
int next = random.nextInt(10000000);
String code = ""+(10000000-next);
ResponseEntity<SmsSendResponse> response = doSend(mobile, code);
return response;
}
public ResponseEntity<SmsSendResponse> doSend(String mobile,String code) {
final String sendUrl = "http://message-service/message/sms/send";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>();
map.add("mobile", mobile);
map.add("templateId", "CHECK_CODE");
map.add("params['code']", code);
log.info("发送参数:{}",map);

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
ResponseEntity<SmsSendResponse> response = restTemplate.postForEntity(sendUrl, request, SmsSendResponse.class);
return response;
}
@RequestMapping(value= {"regist/sms2"})
public ResponseEntity<SmsSendResponse> sms2(String mobile){
Random random = new Random();
int next = random.nextInt(10000000);
String code = ""+(10000000-next);
ResponseEntity<SmsSendResponse> response = doSendFeign(mobile, code);
return response;
}
public ResponseEntity<SmsSendResponse> doSendFeign(String mobile,String code) {
SmsSendRequest request = new SmsSendRequest();
request.setMobile(mobile);
request.setTemplateId("CHECK_CODE");
Map<String, Object> params = new HashMap<>();
params.put("code", code);
request.setParams(params);
return messageService.send(request);
}
@Data
public static class SmsSendResponse {
/**
* 返回消息
*/
private String message;
/**
* 返回状态码
*/
private String code;
}

}
3.测试改造结果
运行UserApplication程序,访问

关于SpringCloud的Feign组件的动态调用 微服务SpringCloud中使用越来越多的服务将业务进行隔离,相互之间使用feign进行调用,但是在使用的时候我们遇到一个问题,每次调用一个新的服务的使用,都要手动的使用@FeignClient注解去申明调用一个服务,问题来了,如果需要调用多个服务,那我们是不是就需要手动的配置多个,于是找了很多博客后,加上自己的实际实践,总结了feign组件的动态调用,可以方便我们的程序开发,省去很多不必要的代码,但由此可能会带来一些feign的性能问题,没有详细测试中,希望使用的朋友们不要忘了测试一下性能哈 首先,. 阅读详情

相关推荐

springCloud中feign调用其他微服务

ackage com.jkgis.party.resource.jkgisresourcelibrary.feign; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bi...

weixin_43608538的博客 2552

SpringBoot 返回String的时候,多了双引号的问题解决

SpringBoot 返回String的时候,多了双引号的问题解决 做项目的时候碰到的问题,就是我的接口要求返回一个String类型的数据,但出现了双引号包含的情况。 /** * xxxxx */ @PostMapping(value = "/querySoIds") @ApiOperation(value = "xxxxx", notes = "xxxxx", response = SysOrg.class) public String querySoI

qq_42010520的博客 4827

SpringCloud之Feign远程调用

目录`feign` 简介`feign` 实现远程调用 feign 简介 feign 是 netflix 开发的声明式、模板化的 http 客户端,它使得 http 请求变得更简单,feign 底层的使用的 http 通信框架是 HttpClient。feign 默认集成了 ribbon 和 hystrix,并和 Eureka 结合,实现了负载均衡。feign 被广泛应用在 springcloud 的解决方案中,是学习基于 springcloud 微服务架构不可或缺的重要组件 官方 github:https:

桐花思雨 1879

通过Feign调用接口,返回数据时出现数据乱码

在路径映射上添加 produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8" 如下所示: Feign端: @GetMapping(value = "/dmgworktask/selectProcessByWordNo/{wordNo}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, .

阿飞的博客 5985

SpringCloud 基础——服务调用(Feign实现)

Feign 是一个声明式的Web服务客户端,在实际项目开发中,这种方式会比较常用,Feign 还自动集成了 Ribbon

贵在坚持 1284

springcloud使用feign进行远程服务调用

声明式服务调用SpringCloud Feign Feign客户端是一个web声明式http远程调用工具,提供了接口和注解方式进行调用,和ribbon都属于springcloud生态内客户端调用组件,与ribbon使用起来稍有差异,下面通过一个简单的demo演示一下feign的使用 1、添加pom依赖 <parent> <groupId>org.spring...

congge 3766

Spring Cloud用OpenFeign做远程调用的话要注意返回值类型能不能被反序列化

每次从零开发一个服务的时候总是遇到各种各样奇怪的问题,今天又从Spring Initializr开始开发一个服务。抄自己的不算抄,本着CV大法优先的原则,从之前其他项目中拷贝了几个component,比如响应Entity封装的类型啊,自定义异常枚举啊这些,如图: 坏就坏在这些不是从Spring Cloud项目中拷过来的,浑然不知已经埋下了坑还嘻嘻哈哈地写了一个client,就是一个简单的用OpenFeign调用一个远程服务,如图: 可以看到这里给响应Entity封装了一个HikResponse类

白白胖胖充满希望 1万+

【SpringCloud】服务调用Feign是什么呢,又该如何用呢?

一、Feign的概念 Feign是Netflix开发的声明式、模板化的HTTP客户端,Feign可以帮助我们更加便捷、优雅地调用HTTP API。 二、Feign的作用 Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。 例如之前拼接URL的形式: 使用feign,不用这中拼接url...

像风走过八千里 3451

springboot项目 Feign调用时,@RequestBody 接受字符串(String),json字符串多出引号

今天对外提供接口,接口如下 打印结果如下: =======mapAlarmVo======JSONObject.toJSONString(mapAlarmVo)=======“{"policeId":"d8e749914fb84492a338a58794f7d098","personTypeName":"嫌疑人","sCaseCode":"210220112240000","alarmTypeName":"无人看管","orgId":"a9d44acdb3d0481f84a1431c24f..

weixin_41716115的博客 5617

第1.1节 构网型 vs. 跟网型:根本区别与技术原理

构网型与跟网型变流器的本质区别在于控制哲学与等效模型。跟网型变流器采用"电压跟随,电流注入"策略,等效为受控电流源,依赖电网电压作为参考,在弱电网下存在稳定性问题。构网型变流器采用"自主同步,电压构建"策略,等效为受控电压源,能主动构建电压和频率,具备自主运行、黑启动和电网支撑能力。两者的核心差异体现在同步机制、电网依赖性、故障行为和系统支撑等方面。构网型变流器更适合高比例新能源、弱电网和微电网场景,是未来电力系统的重要发展方向。

技术工作者 1394

若依RuoYi文件上传漏洞实战:如何安全配置/profile/upload路径(附避坑指南)

本文深入解析若依RuoYi框架中/profile/upload路径的文件上传漏洞,提供详细的安全配置方案和实战指南。通过权限修正、输入验证强化和存储隔离等多层防御策略,有效防范未授权访问和恶意文件上传风险,保障系统安全。

pink的博客 778

第五章 SpringCloud Alibaba 实现Feign服务调用的负载均衡

Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。

weixin_44831330的博客 728

基于角谱传播的MATLAB仿真:从相位恢复看自由空间光传播

本文详细介绍了基于角谱传播理论的MATLAB仿真方法,用于模拟自由空间光传播过程。通过傅里叶光学原理,将光场分解为频谱并应用传播相位滤波器,实现了从纯相位物体到可观测衍射图样的仿真。文章结合具体代码,演示了如何利用角谱法进行相位恢复,为计算成像和生物医学检测等领域的研究提供了实用的仿真工具和思路。

weixin_29055699的博客 279

SpringCloud-基于Feign远程调用

本文将介绍如何在Spring Cloud中使用Feign进行远程调用。Spring Cloud是一个用于构建分布式系统的开发工具包,它提供了一系列的微服务组件,其中之一就是Feign。Feign是一种声明式的Web服务客户端,它简化了在Spring Cloud中进行远程调用的过程。

踏雨歌青春,诗酒趁年华 2687

Unity零基础到入门 ☀️| 小万字教程 对 Unity 中的 协程 ❤️全面解析+实战演练❤️

Unity,为了让Unity基础知识专栏更加完善,又肝了一篇协程来学习。 协程在Unity中还是很常用的,一起来看一下协程的基本概念和使用方法吧!

努力前行,总会成为自己心中的那道光 8万+

Hyperledger Fabric 网络搭建详解

写在前面:博主也是因为一些原因刚刚入坑区块链,我认为在我们入门新技术的时候,入门总是最困难的部分,只要入门了,后面学习起来就会越来越轻松,在网上找了很多文章,我觉得大多条理不是很清楚。本文章会详细介绍fabric(v1.0)环境部署,以及在搭建过程我遇到一些问题及解决方案,希望可以帮助到你们。 博主环境机器:VMware15 Ubuntu16.04 fabric(v1.0)环境部署一、必备软件安装1.ubuntu环境安装2.Go语言3.Docker安装4. Docker-Compose 安装二、Fa.

林中有神君 1万+

SpringCloud之使用Feign客户端来调用服务

SpringCloud之使用eureka实现服务注册与发现https://blog.youkuaiyun.com/kxj19980524/article/details/86774671 在上面这个案例中进行修改 首先在Order项目中添加feign客户端依赖,因为它是调用者 <!--开启feign客户端--> <dependency> <groupId&gt...

kxj19980524的博客 2988

深入剖析 Wenet 下 AISHELL-1 的 run.sh 脚本:从数据准备到模型训练

run.sh脚本用于处理 AISHELL-1 数据集的整个训练和测试流程。我们将逐步分析脚本中的每个部分,包括环境变量、参数设置、各个阶段的执行等。stage: 设置脚本的起始阶段(如数据准备)。stop_stage: 设置脚本的结束阶段。通过对 Wenet 下 AISHELL-1 的run.sh脚本的详细剖析,我们希望你能更好地理解每个步骤的功能及其背后的原理。此脚本不仅为模型训练提供了便利,也为用户自定义和扩展训练流程提供了基础。希望本教程能帮助你顺利完成语音识别项目!

帅小柏的博客 1632

SpringCloud远程调用Feign

Feign是一个声明式的http客户端底层还是基于HTTP实现,是SpringCloud的核心组件之一,实现了微服务之间的远程调用。

qq_57667629的博客 1380

【网络基础2】路由器的 “两扇门”:二层接口和三层接口到底有啥不一样?

家里的路由器背后总有几个网线接口,有的标着 “LAN”,有的标着 “WAN”;公司机房的路由器上,接口更是五花八门,有的插着网线,有的连着光纤,旁边还贴着 “GE0/0/1”“Eth-Trunk1” 这样的标签。你可能会想:不就是插网线的地方吗?有啥区别?其实,这些接口分 “二层接口” 和 “三层接口”,它们的作用差得远了 —— 就像你家的门,有的是 “小区内的单元门”(只通小区内部),有的是 “小区的大门”(能通往外面的世界)。接下来,咱们用大白话 + 生活例子,一点点把这两种接口讲透。

jundao1997的专栏 565

Whisper 模型在嘈杂环境中的表现:降噪与增强技术

本报告系统分析了OpenAI Whisper模型在嘈杂环境中的表现机制,重点揭示其内在降噪能力的技术边界,并结合语音增强(SE)、时频分析等前沿技术提出优化方案。内容覆盖从基础概念(如噪声类型对ASR的影响)到理论框架(模型架构与数学形式化),再到实际应用(端到端部署策略)的全链路分析,同时通过案例研究与可视化工具(如梅尔频谱对比图)降低复杂概念的认知门槛。核心结论指出:Whisper的多语言预训练虽提升了泛化性,但在低信噪比(SNR<5dB)场景下需结合前端降噪或联合训练技术以突破性能瓶颈。

AI 原生应用开发的博客 488

在springcloud的服务中,一个服务要调用另一个服务:使用feign

1.先在调用方添加feign的依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 2.在调用方的启动类上...

猪猪侠的博客 3354

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

使用Feign来实现SpringCloud多模块之间的调用

接着上篇文章写:SpringCloud多模块开发 上篇文章编写了如何搭建多个项目,并且完美运行起来,那么项目间的相互调用要如何实现呢? 首先我在toutiao_download项目中创建了基础数据,和可供外部调用的controller 现在我在快手系统里面要如何才能获取到头条里面的信息呢? 第一步:引入feign依赖 使用feign来实现,首先我们要引入依赖 <!-- feign --> <dependency> <gr

xcc_2269861428的博客 5287

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

springcloud使用feign携带token调用服务

springboot和springCloud版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>...

a1430490717的博客 1988

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SpringCloud Feign实现注册服务调用

Spring Cloud Feign 服务消费调用 在上一篇https://blog.youkuaiyun.com/weixin_43784880/article/details/106074696中 我们已经搭建了三个Eureka server的集群作为服务注册发现中心,此处可以查看上面网址进行搭建。 注:此处没有搭建好就没必要往下进行 我们知道Eureka组件的三大结构: 注册中心Eureka server 服务提供者 Eureka provider 服务调用者Eureka Customer 服务提供者 Eurek

未的博客 1691
上一篇: 第四章 SpringCloud使用Eureka集群
下一篇: 第六章 SpringCloud Zuul网关
CrazyCoder2010
博客等级 码龄16年 298粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值