首页 > 其他分享 >OpenFeign在SpringCloud项目中的搭建

OpenFeign在SpringCloud项目中的搭建

时间:2025-01-22 11:29:23浏览次数:3  
标签:Spring OpenFeign spring SpringCloud springframework import org cloud 搭建

1、添加依赖

首先,在项目中的pom.xml中添加feign和springCloud相关依赖:
<dependencies>
    <!-- Spring Cloud OpenFeign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    <!-- Spring Boot Web (可选,如果项目需要 HTTP 支持) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Cloud LoadBalancer (可选,如果使用负载均衡) -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
</dependencies>

2、启用Feign客户端

在springBoot启动类上添加@EnableFeignClients注解,启用Feign客户端功能:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients // 启用 Feign 客户端
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3、定义feign客户端接口

通过定义一个接口,使用feign的注解来声明远程调用的方法
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "user-service") // 指定服务名称
public interface UserServiceClient {

    @GetMapping("/users/{id}") // 定义 HTTP 请求
    User getUserById(@PathVariable("id") Long id); // 方法签名
}
说明:
  • @FeignClient(name = "user-service"):指定要调用的服务名称(在注册中心注册的服务名)。
  • @GetMapping:定义 HTTP 请求方法和路径。
  • @PathVariable:绑定路径参数。

4、配置Feign

在application.xml或application.properties中配置Feign的相关属性(feign有默认的配置) 默认配置:
  • 超时时间:默认连接超时和读取超时时间较长(通常为几秒)
  • 日志级别:默认不记录日志(Logger.Level.NONE)
NONE(默认级别):不记录任何日志 BASIC:记录基本的请求和响应信息 HEADERS:记录请求和响应的头部信息 FULL:记录完整的请求和相应信息
  • 负载均衡:默认集成Ribbon或Spring Cloud LoadBalancer,支持负载均衡
  • 编码/解码:默认使用Spring的HttpMessageConverter进行请求和响应的序列化与反序列化
feign:
  client:
    config:
      default: # 全局配置
        connectTimeout: 5000 # 连接超时时间
        readTimeout: 5000    # 读取超时时间
        loggerLevel: basic   # 日志级别(NONE, BASIC, HEADERS, FULL)

也可以通过配置类配置feign的日志输出

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL; // 设置日志级别为 FULL
    }
}

配置日志输出(在application.xml或application.properties中配置)

application.xml:
logging:
  level:
    com.example.demo.client.UserClient: DEBUG  # 将 Feign 客户端接口的日志级别设置为 DEBUG

application.properties:
logging.level.com.example.demo.client.UserClient=DEBUG

5、降级逻辑:

1、如果需要使用 Hystrix 实现降级逻辑(Spring Cloud 2020 之前版本),还需要添加 Hystrix 依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
注意:Spring Cloud 2020 及之后版本默认移除了 Hystrix 支持,推荐使用 Resilience4j 或 Sentinel 作为替代方案 2、 在 Spring Boot 启动类上添加 @EnableFeignClients 和 @EnableHystrix 注解 3、定义Feign客户端接口 在Feign客户端接口上 使用@FeignClient注解,并指定fallback或fallbackFActory属性
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "user-service", fallback = UserServiceFallback.class)
public interface UserServiceClient {
    @GetMapping("/users/{id}")
    String getUserById(Long id);
}
4、使用fallbackFactory,获取异常信息, 然后在 @FeignClient 中指定 fallbackFactory
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;

@Component
public class UserServiceFallbackFactory implements FallbackFactory<UserServiceClient> {
    @Override
    public UserServiceClient create(Throwable cause) {
        return new UserServiceClient() {
            @Override
            public String getUserById(Long id) {
                return "Fallback: User not available due to " + cause.getMessage(); // 降级逻辑
            }
        };
    }
}
补充知识:
Ribbon
Feign默认集成了Ribbon,Ribbon自动生效。 Ribbon是Netflix开源的一个客户端负载均衡器,主要用于在分布式系统中实现服务调用的负载均衡 是Spring Cloud生态中的重要组件之一,通常与Eureka(服务注册与发现)和feign(声明式HTTP客户端)配合使用 负载均衡策略: RoundRobinRule—轮询策略 RandomRule—随机策略 WeightedResponseTimeRule—权重策略 RetryRule—重试策略 BestAvailableRule—选择并发请求数量最小的实例
Spring Cloud LoadBalancer
是spring Cloud官方提供的负载均衡器,支持响应式编程,能够和spring Cloud Gateway和Spring WebFlux更好的集成 添加依赖 org.springframework.cloud spring-cloud-starter-loadbalancer

配置spring cloud loadBanlancer

spring: cloud: loadbalancer: retry: enabled: true # 启用重试机制
HttpMessageConverter
是 Spring 框架中的一个核心接口,用于在 HTTP 请求和响应中转换消息体(即请求体或响应体)的内容。它可以将 Java 对象转换为 HTTP 消息体(如 JSON、XML 等),或者将 HTTP 消息体转换为 Java 对象

标签:Spring,OpenFeign,spring,SpringCloud,springframework,import,org,cloud,搭建
From: https://blog.csdn.net/Yi_An_Jie/article/details/145298373

相关文章

  • GD32F303 GCC 环境搭建
    一、引言在嵌入式开发领域,GD32F303微控制器以其出色的性能和丰富的功能被广泛应用。为了充分发挥其潜力,搭建一个高效的开发环境并深入理解项目构建过程至关重要。本文将详细介绍如何基于GCC工具链搭建GD32F303的开发环境,重点聚焦于Makefile文件的编写与解析,助力开发......
  • 使用 Express 搭建 RESTful API:实现用户管理系统的增删改查
    在现代Web开发中,后端接口的实现通常是基于RESTfulAPI的设计。Express是一个轻量级、灵活的Node.jsWeb框架,非常适合快速搭建RESTfulAPI。本文将通过一个完整的示例,展示如何使用Express和CORS中间件搭建一个支持增删改查(CRUD)操作的用户管理系统。我们将实现以下功......
  • 「youlai-boot」入门篇:从0到1搭建 Java、Spring Boot、Spring Security 企业级权限管
    ......
  • 一文搭建本地镜像仓
    一文搭建本地镜像仓拉取registry镜像dockerpullregistry:2运行registry容器第1种方式:不加持久化dockerrun-d-p5000:5000--restart=always--name=registryregistry:2第2种方式:对初始化配置文件,加持久化#创建数据卷,用于挂载dockercreatevolumeregistryvolume......
  • 节省时间与成本:购买源码搭建体育比分网站的好处
    节省开发时间和成本快速上线:购买现成的源码,省去了从零开始开发的时间,可以更快地将网站或应用上线。降低成本:相比于从头开发,购买源码通常成本更低,尤其是对于复杂的功能。减少开发风险成熟的解决方案:现成的源码通常已经经过测试和使用,减少了开发过程中的不确定性和错误。技术......
  • 【原创】MAC OS 本地搭建部署 dify
     一、什么是dify?Dify是一个开源的大语言模型(LLM)应用开发平台,融合了后端即服务(BackendasService,BaaS)和LLMOps理念,旨在简化和加速生成式AI应用的创建和部署。它支持多种大型语言模型(如OpenAI的GPT系列、Claude3等),并提供强大的数据集管理功能、可视化的Prompt编排以及......
  • 用Python实现SVM搭建金融反诈模型(含调试运行)
    1.概述信用卡盗刷一般发生在持卡人信息被不法分子窃取后,复制卡片进行消费或信用卡被他人冒领后激活并消费等情况下。一旦发生信用卡盗刷,持卡人和银行都会遭受一定的经济损失。本节要运用支持向量机分类算法搭建一个金融反欺诈模型。2.数据集使用的数据集共有1000条客户信用......
  • [实现Rpc] 环境搭建 | JsonCpp | Mudou库 | callBack()
    目录1.项目介绍2.技术选型3.开发环境和环境搭建Ubuntu-22.04环境搭建1.安装wget(一般情况下默认会自带)2.更换国内软件源①备份原始/etc/apt/sources.list文件②编辑软件源文件③更新软件包列表3.安装常用工具3.1安装lrzsz传输工具3.2安装编译器gcc......
  • 搭建本地大模型
    构建本地大模型-ollama-conda的安装和配置安装conda环境Win10LTSC下载安装包有两个版本,Anaconda3和Miniconda3。两者的区别:1、Anaconda3包含了很多库,Miniconda3只包含了基础库;2、Anaconda3的安装包有JupyterNotebook,Miniconda3没有。建议:刚入门的童鞋安装Anaconda3,保证......
  • 初见ESP32并搭建Platformio环境
    碎碎念(寒假参加了硬禾学堂的活动,拿到了基于esp32的CrowPanel开发板。TFTLCD触摸屏能玩出不少花样,lvgl,ai识别,如果可以的话想试试把屏接到f407学习一下FSMC和FATFS。第一步先从开发平台搭建开始。总体流程为在VSCode上下载platformio的插件在插件上打开新建项目并编译下载到......