【微服务】- 服务调用 - OpenFeign

本文介绍了Spring Cloud OpenFeign作为声明式服务调用组件的使用,包括如何引入依赖、编写调用接口,以及如何进行自定义配置如日志、超时时间和重试机制。此外,文章还探讨了Feign的使用优化,如选择OkHttp客户端,配置超时时间,设置拦截器等。

服务调用 - OpenFeign

:smile:生命不息,写作不止

:fire: 继续踏上学习之路,学之分享笔记

:facepunch: 总有一天我也能像各位大佬一样

:trophy: 一个有梦有戏的人 @怒放吧德德

:full_moon_with_face:分享学习心得,欢迎指正,大家一起学习成长!

介绍

OpenFeign 全称 Spring Cloud OpenFeign,它是 Spring 官方推出的一种声明式服务调用与负载均衡组件,它的出现就是为了替代进入停更维护状态的 Feign。

Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了

Ribbon和Nacos,从而使得Feign的使用更加方便。

Feign使用http远程调用方法就好像调用本地的方法,感觉不到是远程方法。他的使用就和直接写控制类那样,暴露接口提供调用,我们只需要编写调用接口+@FeignClient注解,在使用这个api的时候,只需要定义好方法,到时候调用这个方法就可以了。这种服务之间的调用使用起来是非常的方便,体验也比较好。

如何实现接口调用?

在平时开发的springboot项目中,像这种rest服务是如何被调用的呢?通常下是使用Httpclient、Okhttp、HttpURLConnection、RestTemplate,其中RestTemplate是最常见的。之前在 nacos配置中心 使用的是RestTemplate。

SpringCloud整合OpenFeign

就用一个例子来简单使用OpenFeign进行服务间的调用,通过实例来学习关于Feign组件的功能。

引入依赖

使用OpenFeign组件需要引入客户端依赖

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

编写调用接口

通过OpenFeign远程调用服务的时候,比RestTemplate更加方便,就跟编写controller接口是差不多的。

需要写上@FeignClient注解,里面配置微服务名字和rest的@RequestMapping("/api/store"),或者可以在声明调用pai的时候写上完整的路径。

简单的对应如下图所示

代码如下:

package com.lyd.demo.feign;
import com.lyd.demo.feign.config.FeignOkhttpConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.
### 使用OpenFeign进行微服务直接调用 #### 一、简介 OpenFeign 是 Spring Cloud 提供的服务调用中间件,旨在简化 HTTP API 客户端的开发工作。它支持声明式的 Web Service 客户端定义方式,允许开发者像编写本地方法一样调用远程HTTP服务[^1]。 #### 二、准备工作 为了使用 OpenFeign 实现微服务间的直接调用,需先完成如下配置: - **引入依赖**:确保项目的 `pom.xml` 文件中包含了必要的 Maven 或 Gradle 依赖项来启用 Feign 支持。 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` - **启动类注解**:在应用程序入口处添加 `@EnableFeignClients` 注解以激活 Feign 功能。 ```java @SpringBootApplication @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 三、创建Feign客户端接口 定义一个接口用于描述目标服务的操作契约,并标注相应的请求映射规则。此接口将由框架自动生成具体的实现逻辑。 ```java @FeignClient(name="service-b", url="${service.b.url}") public interface ServiceBClient { @GetMapping("/B_testOpenFeign") ResponseDTO<String> getTestMessage(); } ``` 这里假设存在名为 "service-b" 的另一个微服务提供了一个 `/B_testOpenFeign` 接口返回字符串消息;上述代码即为对该接口的抽象表示形式[^4]。 #### 四、注入并使用Feign Client 最后,在需要发起跨服请求的地方通过标准的Spring Bean机制获取到之前定义好的Feign client实例即可轻松完成远程过程调用了。 ```java @RestController @RequestMapping("/api/v1/service-a") public class ControllerA { private final ServiceBClient serviceBClient; @Autowired public ControllerA(ServiceBClient serviceBClient){ this.serviceBClient = serviceBClient; } @GetMapping("/call-service-b") public ResponseEntity<?> callServiceB(){ try{ var responseFromB = serviceBClient.getTestMessage(); return new ResponseEntity<>(responseFromB.getData(), HttpStatus.OK); } catch (Exception e){ log.error("Failed to invoke service B.",e); throw new RuntimeException(e.getMessage()); } } } ``` 这段示例展示了如何在一个控制器里利用已有的 `ServiceBClient` 对象向远端服务器发送GET请求并处理响应数据[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值