springcloud==openfeign

单独使用

创建一个服务端

复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class UserServiceApplication {

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

    @RestController
    class UserController {

        @GetMapping("/users/{id}")
        public User getUser(@PathVariable String id) {
            // 模拟用户信息
            return new User(id, "User" + id);
        }
    }

    class User {
        private String id;
        private String name;

        // 构造函数、getters、setters
    }
}

创建一个客户端用openfeign去访问服务端

客户端的依赖

<dependency>

<groupId>io.github.openfeign</groupId>

<artifactId>feign-core</artifactId>

<version>13.1.0</version>

</dependency>

<dependency>

<groupId>io.github.openfeign</groupId>

<artifactId>feign-gson</artifactId>

<version>13.1.0</version>

</dependency>

复制代码
import feign.Feign;
import feign.gson.GsonDecoder;
import feign.Param;
import feign.RequestLine;

public class FeignDemo {

    interface UserClient {
        @RequestLine("GET /users/{id}")
        User getUserById(@Param("id") String id);
    }

    public static void main(String[] args) {
        UserClient userClient = Feign.builder()
                                     .decoder(new GsonDecoder())
                                     .target(UserClient.class, "http://localhost:8080");

        User user = userClient.getUserById("123");
        System.out.println(user.getName());
    }

    static class User {
        private String id;
        private String name;

        // getters 和 setters
    }
}

其中openfeign的作用:

复制代码
执行了几个关键步骤:

动态代理: Feign 使用了动态代理设计模式来创建 UserClient 接口的代理实例。这是一种结构型设计模式,允许在运行时创建一个实现了一组接口的对象。

构建请求模板: 对于接口中的每个方法,Feign 会构建一个请求模板,该模板包含了请求的方法、URL 和参数等信息。

反射: Feign 通过 Java 反射机制来解析接口上的注解,这样它就能了解如何构建 HTTP 请求和处理响应。

构建 HTTP 客户端: Feign 使用构建好的配置创建一个 HTTP 客户端,这个客户端用于发送请求。

请求拦截器: 如果配置了请求拦截器,Feign 会在发送请求之前处理这些拦截器,这常用于添加身份验证信息等。

装饰器模式: Feign 可以使用装饰器模式来包装 HTTP 客户端,添加额外的功能,如日志记录、重试机制等。

由于客户端是单纯用了openfeign,所以最终是建立一个HttpURLConnection,然后发出请求

相关推荐
xiaogg36789 小时前
springcloud oauth2 自定义token实现
spring boot·后端·spring cloud
大龄码农-涵哥9 小时前
Spring Cloud微服务架构详解:从服务注册到配置中心,阿里面试核心知识点
spring cloud·微服务·架构
下地种菜小叶10 小时前
特征定义、特征计算、特征服务怎么配合?一次讲透
java·服务器·前端·数据库·spring cloud
Devin~Y11 小时前
大厂Java面试实战:Spring Boot + Redis + Kafka + Kubernetes + RAG 的三轮追问(附答案解析)
java·spring boot·redis·spring cloud·kafka·kubernetes·resilience4j
立莹Sir14 小时前
商品中台架构设计与技术落地实践——基于Spring Cloud微服务体系的完整解决方案
分布式·后端·spring cloud·docker·容器·架构·kubernetes
Devin~Y1 天前
大厂Java面试实战:Spring Boot/Cloud + Redis/Kafka + K8s + RAG/Agent 追问全流程(小Y翻车记)
java·spring boot·redis·spring cloud·kafka·kubernetes·micrometer
九转苍翎1 天前
微服务学习笔记(3)——基于SpringCloud OpenFeign实现远程调用
spring cloud·openfeign
Devin~Y2 天前
大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问
java·spring boot·redis·mysql·spring cloud·kafka·kubernetes
LSL666_2 天前
快速Spring Cloud+ELK+AOP搭建一个简单的项目
spring·elk·spring cloud
杰克尼2 天前
天机学堂项目总结(day11~day12)
spring·spring cloud