Netflix Feign 入门示例

前面已经完成了 Feign 的准备工作,下面将通过一个简单的例子来介绍如何使用 Feign 调用 HTTP 服务。

💢注意,该项目仅仅是一个非常简单的 Spring Boot 项目,不需要引入 Spring Cloud 相关的依赖。

项目依赖

完整的 pom.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hxstrive</groupId>
    <artifactId>demo_netflix_feign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo_netflix_feign</name>
    <description>demo_netflix_feign</description>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!-- feign 依赖 -->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-jackson</artifactId>
            <version>11.8</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>demo_netflix_feign</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

创建启动类

一个常见的 Spring Boot 启动类,代码如下:

package com.hxstrive.demo_netflix_feign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 启动类
 * @author hxstrive.com
 */
@SpringBootApplication
public class DemoFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoFeignApplication.class, args);
    }

}

application.yml 配置文件

该配置文件仅仅用来配置端口和应用名称、以及日志信息,内容如下:

server:
  port: 8080

spring:
  application:
    name: feign_application

logging:
  level:
    root: debug

定义 Feign 客户端

说的直白点,就是创建一个接口,该接口定义了用来调用目标 HTTP 服务的一些方法定义,一个简单的 Feign 客户端代码如下:

package com.hxstrive.demo_netflix_feign.feign;

import feign.Contract;
import feign.Feign;
import feign.RequestLine;
import feign.codec.Decoder;
import feign.codec.Encoder;

/**
 * 用户 Feign
 * @author hxstrive.com
 */
public interface SimpleFeign {

    // 定义获取用户信息的方法
    @RequestLine("GET /simple/hello")
    public String get();

    // 创建Feign客户端实例的静态方法
    static SimpleFeign create() {
        return Feign.builder()
                .encoder(new Encoder.Default())
                .decoder(new Decoder.Default())
                .contract(new Contract.Default())
                .target(SimpleFeign.class, "http://localhost:8090/");
    }

}

注意,这里没有在类上面添加任何注解,在使用的时候通过类名调用 create() 静态方法或一个 SimpleFeign 接口的实例,通过调用该实例的 get() 方法就可以发起 http://localhost:8090/simple/hello 的 GET 请求。

FeignController 控制器

该控制器用来接收客户端的请求,然后使用 Feign 客户端调用具体的 HTTP 服务,代码如下:

package com.hxstrive.demo_netflix_feign.controller;

import com.hxstrive.demo_netflix_feign.dto.CommonReturn;
import com.hxstrive.demo_netflix_feign.entity.User;
import com.hxstrive.demo_netflix_feign.feign.SimpleFeign;
import com.hxstrive.demo_netflix_feign.feign.UserFeign;
import com.hxstrive.demo_netflix_feign.feign.UserRestfulFeign;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 控制器
 * @author hxstrive.com
 */
@RestController
public class FeignController {

    @GetMapping("/demo1")
    public String demo1() {
        return SimpleFeign.create().get();
    }

}

启动该 Spring Boot 项目,同时将“Feign 准备工作”章节的服务启动起来。在浏览器访问 localhost:8080/demo1 地址,效果如下图:

95cddcb91195db6532dcd32503848156_1729867797437-b665335a-8e94-46e6-a2be-41a6cdc756ef.png

从上图可知,已经成功使用 Netflix Feign 调用到了目标服务,搞定……后续将学习更多关于 Feign 的知识。

💢注意:该示例是后续学习的基础示例,后续将在该示例的基础上进行,不会单独创建项目。💢

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号