首页 > 其他分享 >OpenFeign

OpenFeign

时间:2023-09-25 21:46:13浏览次数:27  
标签:skuId product 服务 OpenFeign public cloud

OpenFeign

底层实现上:

  1. 获取到你正在运行的实例(instance(也即是注册在nacos等注册中心的applicationName))
  2. 编辑请求(包括函数的url,参数,方法,返回值等)(通常是调用一些方法来构成这个请求)
  3. 负载均衡:最烂的做法就是获取总共的该服务有多少instance然后在其中取个随机值即可
  4. 发送,然后处理返回值

调用OpenFeign

  1. 导包
<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>
            <version>3.1.5</version>
        </dependency>
  1. 使用上:
    1. configuration类或者其他配置类上添加注解@EnableFeignClients
    2. 在每个FeignClient中都采用类似MVC的方式:不同的是没有方法体和要加上注解@FeignClient(
      "对应服务的applicationName")

如下:

@FeignClient("gulimall-product")
public interface ProductFeignService {
    @RequestMapping("/product/skuinfo/info/{skuId}")
    public R info(@PathVariable("skuId") Long skuId);
    @RequestMapping("/product/skusaleattrvalue/getSkuSaleAttrList/{skuId}")
    public R  getSkuSaleAttrList(@PathVariable("skuId") Long skuId);
    @GetMapping("/product/skuinfo/{skuId}/price")
    public BigDecimal getPrice(@PathVariable("skuId") Long skuId);
}

需要注意的点

  • 在描写路径时,要精准描写

连接池(性能提升)

其实openFeign的代码并不直接支持发送http请求,而是利用其他的依赖来发送,而默认的依赖是不支持连接池的

总共支持的依赖有如下几种:

以OKHttp为例:

步骤

  1. 导依赖
<!--OkHttp,为feign带来了连接池 -->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-okhttp</artifactId>
            <version>12.5</version>
        </dependency>
  1. 更改配置文件
#okHttp
feign.okhttp.enabled=true

分布式项目的最佳实践

由于feignservice一直需要被调用,

所以有两种主流做法:

  1. 把每一个可能被远程调用的服务继续细分(3份)
    1. DTO
    2. api(放feignService的)
    3. biz(业务代码)
  2. 弄一个统一的模块类似(common)的guli-api
    1. 然后其他服务依赖这个服务

虽然第二种做法,看起来不那么分布式,但是它结构简答了许多,更常用

远程调用开启日志

前提

你本来服务就开启了日志,且等级为debug及以上

开启方法

配置一个配置类

@Configuration
//@ConditionalOnClass(DispatcherServlet.class),直接弄一个enable的注解得了
public class GuliFeignConfig {
    @Bean
    public Logger.Level level(){
        return Logger.Level.BASIC;
    }
}

共有以下四种类型

闲谈

在制作配置类时,像FeignConfig我们在绝大多数服务中都会用到,所以注入时有经验的

目前情况

  • config没在我们默认的扫描范围
  • 且部分服务如gateway由于使用webflux不能同时使用mvc(这点在目前体现不出,但在之后:要注入:RequestInterceptor时会冲突)

解决方法(针对第一个情况)

  1. 在启动类设置scanBasePackages()
  2. 弄一个spring.factories文件,在里面写好要配置的configuration类
  3. 弄一个annotation(@EnableFeignConfig),在其之上加上@import("配置类"),之后只要用到该注解则会自动导入

解决方法(针对第2个情况)

  1. 设置@ConditionalOnClass(DispatcherServlet.class)
  2. 在部分服务导入依赖时用exclusions

标签:skuId,product,服务,OpenFeign,public,cloud
From: https://www.cnblogs.com/seamount3/p/17728909.html

相关文章

  • SpringCloudAlibaba整合OpenFeign
    OpenFeign是一个用于简化HTTP客户端的开源框架,它是SpringCloud生态系统的一部分。它的主要作用是简化在使用HTTP请求时编写客户端代码的过程,特别是在构建微服务架构中的服务之间进行通信时。OpenFeign提供了一种声明式的方式来定义和使用HTTP客户端接口。通过使用注解来描述HTTP......
  • 关于openfeign的使用以及降级
    首先第一步导入依赖:<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 然后编写Feign接口,注意加@feig......
  • SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用
    一、概述微服务的开发必定会用到SpringBoot、Nacos(服务发现、注册、配置中心)、OpenFeign(服务远程调用,也就是通过注解调用其他服务的接口)。今天写这篇是想把这三个功能集成在一起。让他们一起参与微服务的开发工作。要实现的目标:nacos要能够注册及发现服务,openfeign......
  • 手写Openfeign实现原理——极简版
    文章目录前言Openfeign实现思路前期准备基本依赖项开始实现自定义注解自定义代理类定义创建代理对象的工厂InstantiationAwareBeanPostProcessor实现bean的注入OpenInstantiationAwareBeanPostProcessor自定义feign接口启动类小结踩坑记录@Import@Component和@Configuration区别......
  • OpenFeign介绍
    1Java接口调用有哪些方式2Feign描述3OpenFeign的使用 Stock服务 Order服务 ......
  • openfeign应用汇总(三)
    openfeign应用汇总(三)1、自定义统一处理正确返回结果(实现Decoder)importjava.io.IOException;importjava.lang.reflect.Type;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importfeign.Response;importfeign.Util;importfeign.codec.DecodeException;i......
  • openfeign应用汇总(二)
    openfeign应用汇总(二)1、开启feign日志importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importfeign.Logger;importfeign.codec.Decoder;importfeign.codec.ErrorDecoder;@Configurationpublicclas......
  • openfeign 传递异常信息
    1处理非200异常pom<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-jackson</artifactId></dependency>codepublicclassFeignExceptionimplementsErrorDecoder......
  • 动力节点第四章OpenFeign与负载均衡-最全springcloud Alibaba学习笔记
    学习笔记视频:https://www.bilibili.com/video/BV1VW4y1o7n5本课程使用的是目前最新版本2022.0.0.0-RC2。基于SpringBoot3.0与JDK20的开发环境。课程内容涵盖了SpringCloudAlibaba所有的技术点,主要讲述包括NacosDiscovery、NacosConfig、OpenFeign、SpringCloudLoadbalance......
  • 使用OpenFeign传递二进制流
    在现代的分布式系统中,服务之间的通信变得越来越普遍。OpenFeign是一个流行的JavaHTTP客户端工具,它简化了在微服务架构中进行服务间通信的过程,本文将简单介绍如何使用OpenFeign传递二进制流。什么是OpenFeign?OpenFeign是一个用于声明式、模板化的HTTP客户端的Java库。它简化了编......