OpenFeign/Feign:Spring Cloud项目 使用feign 实现远程服务接口调用(@FeignClient)

本文主要是介绍OpenFeign/Feign:Spring Cloud项目 使用feign 实现远程服务接口调用(@FeignClient),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenFeign/Feign:Spring Cloud项目 使用feign 实现远程服务接口调用(@FeignClient)

一、简介
SpringCloud 通过 OpenFeign/Feign 服务调用方式
OpenFeign:类似于Dubbo,像调用本地方法一样调用远程服务
feign原理:代理.
ribbon原理:拦截器:为RestTemplate增加了@LoanBalanced 注解后,实际上通过配置,为RestTemplate注入负载均衡拦截器,让负载均衡器选择根据其对应的策略选择合适的服务后,再发送请求。

在微服务架构开发时,常常会在一个项目中调用其他服务,其实使用Spring Cloud Ribbon就能实现这个需求,利用RestTemplate 的请求拦截来实现对依赖服务的接口调用, 但是实际项目中对服务依赖的调用可能不止于 一 处,往往 一 个接口会被多处调用,所以我们通常都会针对各个微服务自行封装 一 些客户端类来包装这些依赖服务的调用。 这个时候我们会发现,由于 RestTemplate 的封装,几乎每 一 个调用都是简单的模板化内容。

Spring Cloud Feign 在此基础上做了进 一 步封装,由它来帮助我们定义和实现依赖服务接口的定义。在 Spring Cloud Feign 的实现下, 我们只需创建 一 个接口并用注解(@FeignClient)的方式来配置它, 即可完成对服务提供方的接口绑定,简化了在使用 Spring Cloud Ribbon 时自行封装服务调用客户端的开发量。 

1)使用@FeignClient, 定义一个 服务接口 :FeignTestServcie

/**
 * 定义接口
 * 调用远程服务
 * 
 * @author live
 */
@FeignClient(name = "service-provider")
public interface FeignTestServcie {

    @GetMapping("discovery/provider/echo/{str}")
//    String echo(@PathVariable String str) ; //此写法错误,必须使用value指定 @PathVariable(value="str")String str
    String echo(@PathVariable(value = "str") String str);
}
2)注入后,直接调用 该Service 的方法
/**
     * 通过 Feign 服务调用方式
     */
    @Autowired
    FeignTestServcie service1;

    @RequestMapping(value = "/echoByFeign/{str}", method = RequestMethod.GET)
    public String echoByFeign(@PathVariable String str) {
        return service1.echo(str);
    }
    
二、详解
1、pom依赖
        <!-- feign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        
2、/**
 * 定义接口
 * 调用远程服务
 * 
 * @author live
 */
//@Component
@FeignClient(name = "service-provider")
public interface FeignTestServcie {

    @GetMapping("discovery/provider/echo/{str}")
//    String echo(@PathVariable String str) ; //此写法错误,必须使用value指定 @PathVariable(value="str")String str
    String echo(@PathVariable(value = "str") String str);
//    {
//        return restTemplate.getForObject("http://service-provider/discovery/provider/echo/" + str, String.class);
//    }
}

3、Controller 使用 Feign客户端
1)@EnableFeignClients(basePackages="com.live.test.javaee.springboot.feign.service")
2)@Autowired
    FeignTestServcie service1;


@Component
@RestController
@RequestMapping("feign")
@EnableDiscoveryClient
//@EnableFeignClients
@EnableFeignClients(basePackages="com.live.test.javaee.springboot.feign.service")
public class FeignConsumerController {

    /**
     * 通过 Feign 服务调用方式
     */
    @Autowired
    FeignTestServcie service1;

    @RequestMapping(value = "/echoByFeign/{str}", method = RequestMethod.GET)
    public String echoByFeign(@PathVariable String str) {
        return service1.echo(str);
    }
    
测试:

http://localhost:8082/feign/echoByFeign/hello123

这篇关于OpenFeign/Feign:Spring Cloud项目 使用feign 实现远程服务接口调用(@FeignClient)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734542

相关文章

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess