1120 字
约 3 分钟
30
引入 OpenFeign 组件:实现服务间调用

引入 OpenFeign 组件:实现服务间调用

在上小节中,我们已经完成了用户信息修改接口的大致逻辑,但是,调用对象存储服务上传图片这块的代码还没写。本小节中,就将引入 OpenFeign 组件,先解决服务间调用问题。

什么是 OpenFeign?

OpenFeign 是一个声明式的 HTTP 客户端,它使得我们可以非常方便地调用 HTTP 接口。OpenFeign 是 Netflix 开源的 Feign 项目的扩展,旨在与 Spring Cloud 紧密集成。它通过注解来定义接口,类似于 Spring MVC 的控制器,使得开发者可以专注于业务逻辑,而不需要关注 HTTP 请求的具体实现。

提供一个测试接口

接下来,我们就来实际感受一下 OpenFeign 的魅力。在 xiaohashu-oss 对象存储服务,为其添加一个测试接口,用于等会测试使用。首先,在 xiaohashu-oss-biz 模块的 pom.xml 文件中,添加接口日志组件,用于等会打印接口调用日志,以便观察:

<!-- 业务接口日志组件 -->
<dependency>
    <groupId>com.quanxiaoha</groupId>
    <artifactId>xiaoha-spring-boot-starter-biz-operationlog</artifactId>
</dependency>

<!-- Jackson 组件 -->
<dependency>
    <groupId>com.quanxiaoha</groupId>
    <artifactId>xiaoha-spring-boot-starter-jackson</artifactId>
</dependency>

在 /controller 包下新建 TestFeignController 测试控制器,添加一个 /file/test 接口:

package com.quanxiaoha.xiaohashu.oss.biz.controller;

import com.quanxiaoha.framework.biz.operationlog.aspect.ApiOperationLog;
import com.quanxiaoha.framework.common.response.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author: 犬小哈
 * @description: Feign 测试接口
 **/
@RestController
@RequestMapping("/file")
@Slf4j
public class TestFeignController {

    @PostMapping(value = "/test")
    @ApiOperationLog(description = "Feign 测试接口")
    public Response<?> test() {
        return Response.success();
    }

}

添加 OpenFeign 相关依赖

测试接口添加完毕后,编辑 xiaohashu-oss-api 模块的 pom.xml 文件,添加 OpenFeign 相关依赖,如下:

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

<!-- 负载均衡 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

TIP:OpenFeign 通常和 loadbalancer 接口负载均衡组件搭配使用。

声明 FeignClient 客户端接口

在 xiaohashu-oss-api 模块中,新建 /api 包,专门用于放置 FeignClient 客户端接口,代码如下:

package com.quanxiaoha.xiaohashu.oss.api;

import com.quanxiaoha.framework.common.response.Response;
import com.quanxiaoha.xiaohashu.oss.constant.ApiConstants;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;

/**
 * @author: 犬小哈
 **/
@FeignClient(name = ApiConstants.SERVICE_NAME)
public interface FileFeignApi {

    String PREFIX = "/file";

    @PostMapping(value = PREFIX + "/test")
    Response<?> test();

}

@FeignClient 是用来标记这个接口是一个 Feign 客户端的注解。name = ApiConstants.SERVICE_NAME 指定了这个 Feign 客户端所调用的服务名称。这个名称通常是在注册中心(如 Eureka 或 Nacos)中注册的服务名称。String PREFIX = "/file"; 定义了一个前缀常量,用于接口中 URI 的路径前缀。@PostMapping 注解标记这个方法将执行一个 HTTP POST 请求。value = PREFIX + "/test" 指定了这个 POST 请求的路径,这里是 /file/test。

再新建一个 /constant 常量包,创建 ApiConstants 常量类,定义一个服务名称常量,即本身注册到 Nacos 中的服务名称:

package com.quanxiaoha.xiaohashu.oss.constant;

/**
 * @author: 犬小哈
 **/
public interface ApiConstants {

    /**
     * 服务名称
     */
    String SERVICE_NAME = "xiaohashu-oss";
}

到这里,对象存储服务就将 /file/test 接口的 Feign 客户端,封装到 api 模块中了,有其他服务想要调用对象存储服务的 /file/test 接口,只需引入 xiaohashu-oss-api 模块即可。

统一管理

编辑小哈书最外层的 pom.xml 文件,将 xiaohashu-oss-api 模块统一管理起来:

<dependency>
    <groupId>com.quanxiaoha</groupId>
    <artifactId>xiaohashu-oss-api</artifactId>
    <version>${revision}</version>
</dependency>

然后,在需要调用对象存储服务的 xiaohashu-user-biz 模块的 pom.xml 文件中,引入该依赖:

<dependency>
    <groupId>com.quanxiaoha</groupId>
    <artifactId>xiaohashu-oss-api</artifactId>
</dependency>

依赖引入后,记得刷新 Maven 依赖。

启用 Feign 客户端

编辑 XiaohashuUserBizApplication 启动类,添加 @EnableFeignClients 注解,以启用引入的 xiaohashu-oss-api 模块中定义好的 Feign 客户端:

package com.quanxiaoha.xiaohashu.user.biz;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableFeignClients(basePackages = "com.quanxiaoha.xiaohashu")
public class XiaohashuUserBizApplication {

}

服务间调用

以上工作完成后,就可以在用户服务中,注入 FileFeignApi 客户端,来调用对象存储服务的 /file/test 接口了:

在更新用户信息逻辑方法中,添加代码如下:

@Resource
private FileFeignApi fileFeignApi;

if (Objects.nonNull(avatarFile)) {
    // todo: 调用对象存储服务上传文件
    fileFeignApi.test();
}

测试一波

重启用户服务和对象存储服务,通过 Apipost 工具调用一下用户信息修改接口,看看用户服务是否能够调用得通 oss 服务。观察对象存储服务的控制台日志,成功打印了接口出入参日志,说明调用成功了。

本小节源码下载

https://t.zsxq.com/ONGpj

引入 OpenFeign 组件:实现服务间调用
https://clxhxhhr.top/posts/2943/
作者
clxstart
发布于
2026-09-20
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。