返回顶部
首页 > 资讯 > 精选 >如何解决springboot2.x引入feign踩的坑
  • 703
分享到

如何解决springboot2.x引入feign踩的坑

2023-06-26 06:06:05 703人浏览 八月长安
摘要

小编给大家分享一下如何解决SpringBoot2.x引入feign踩的坑,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!springboot2.x引入feign踩的

小编给大家分享一下如何解决SpringBoot2.x引入feign踩的坑,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

springboot2.x引入feign踩的坑

一、需求

最近公司项目需求,需要调用第三方服务的接口,所以选用了feign来实现(这里只说springboot2.x的pom引用,没有怎么使用,网上一大顿)。

二、什么是feign

feign是声明式的WEB service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。spring cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡Http客户端。

三、springboot1.x中feign的使用

这里不展示hystrix熔断的配置和实现

3.1 在pom.xml中加入依赖

<!-- feign依赖 --><dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-starter-feign</artifactId>  <version>1.2.2.RELEASE</version></dependency><!-- hystrix 断路器依赖 用于处理请求第三方接口超时 --><dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-starter-hystrix</artifactId>  <version>1.2.3.RELEASE</version></dependency><dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>  <version>1.2.3.RELEASE</version></dependency>

3.2 在启动类上添加注解@EnableFeignClients

@EnableCaching@EnableAutoConfiguration@SpringBootApplication@EnableConfigurationProperties@ServletComponentScan//配置druid必须加的注解,如果不加,访问页面打不开,filter和servlet、listener之类的需要单独进行注册才能使用,spring boot里面提供了该注解起到注册作用@EnableTransactionManagement@EnableFeignClients@EnableHystrix@EnableCircuitBreaker@EnableHystrixDashboardpublic class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}}

3.3 启动springboot的启动类

四、springboot2.x中feign的使用

这里不展示hystrix熔断的配置和实现

在另外项目中引用的时候用的是spring2.x,所以就出现问题了,引入feign失败。网上说springboot2.x需要如下引入:

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

但是我使用openfeign在启动的时候报错:

如何解决springboot2.x引入feign踩的坑

所以我将pom.xml的依赖改成了这样(<parent>一定要注释掉):

<!-- 此处一定要注释掉parent继承父级的依赖 --><!--<parent>-->    <!--<groupId>org.springframework.boot</groupId>-->    <!--<artifactId>spring-boot-starter-parent</artifactId>-->    <!--<version>2.1.2.RELEASE</version>--><!--</parent>--><dependencies>  <!-- ...其他的依赖省略了 -->  <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-openfeign</artifactId>  </dependency>  <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-hystrix</artifactId>      <version>1.2.3.RELEASE</version>  </dependency>  <dependency>      <groupId>org.springframework.cloud</groupId>      <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>      <version>1.2.3.RELEASE</version>  </dependency></dependencies> <repositories>  <repository>      <id>spring-milestones</id>      <name>Spring Milestones</name>      <url>https://repo.spring.io/libs-milestone</url>      <snapshots>          <enabled>false</enabled>      </snapshots>  </repository></repositories><dependencyManagement>  <dependencies>      <dependency>          <groupId>org.springframework.cloud</groupId>          <artifactId>spring-cloud-openfeign</artifactId>          <version>2.0.0.RC1</version>          <type>pom</type>          <scope>import</scope>      </dependency>  </dependencies></dependencyManagement>

启动类注解和springboot1.x中的一样,启动工程,就可以了。

feign调用方式比较

一、事发原因

两个东家都使用SpringCloud,巴拉巴拉用上了Spring全家桶,从eureka到ribbon,从ribbon到feign,从feign到hystrix,然后在使用feign的时候发现使用方式不同,仔细一看这种调用方式,唉,麻烦,我怎么要自己定义DTO,自己定义Fallback, 自己定义方法呢?用上之后,其实发现各有各的好处,今天就来一一记录一下。

二、方式1介绍

我们在开发服务的时候,会把接口和实现分开, 即有一个api模块和一个Service模块,消费者依赖API的jar包,直接注入API中的Service,则可以直接通过Feign调用到对应的服务,对应的项目结构如下:

如何解决springboot2.x引入feign踩的坑

我们在接口API中定义好方法,并加上Feign注解等(MICRO-PROVIDER2是服务名,注册到Eureka Server上的名称。 使用Feign还可以自己实现fallback,设置超时默认放回值。这里做测试,不写过多代码)。

具体的实现如下图所示。

如何解决springboot2.x引入feign踩的坑

接下来就是我们如何在consumer中去消费这个服务了,我们会在service服务中,依赖api的jar包,实现Provider2Service即可。

具体的实现如下图

如何解决springboot2.x引入feign踩的坑

代码中的实现逻辑:

如何解决springboot2.x引入feign踩的坑

三、方式2介绍

这中方式介绍起来比较简单。直接在消费者中定义新的service接口,通过Feign注解,定义方法,调用的url和被调用服务的url相同,实现逻辑如下。

如何解决springboot2.x引入feign踩的坑

四、调用结果测试

方式2:

如何解决springboot2.x引入feign踩的坑

方式1:

如何解决springboot2.x引入feign踩的坑

可以看到,两种方式都是可以消费到服务(本质是一样)。但是两种方式各有好处和坏处,我们要来比较下,看看究竟哪一种才是我们需要的呢?

五、两种方式对比  

通过两种方式的对比,我们可以看到的优优劣势主要有:

方式一:

优点:

服务消费者不用自己写接口。

可提供好Dto,Vo等直接给服务消费者。

缺点:

service需要依赖jar包,如果依赖服务过多,jar也会过多。

给消费者暴露了过多的接口。部分与消费者无关的接口也暴露给对方。

方式二:

优点:

无需依赖过多jar包。

消费者不要要过多接受消费者提供的方法。

缺点:

需要消费者自己实现接口。

严重依赖文档。在实现接口时,对于所有信息都要有文档定义。如:请求方式,请求参数,返回值等。

自己完成Dto,Vo的编写。  

以上是“如何解决springboot2.x引入feign踩的坑”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何解决springboot2.x引入feign踩的坑

本文链接: https://lsjlt.com/news/307399.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何解决springboot2.x引入feign踩的坑
    小编给大家分享一下如何解决springboot2.x引入feign踩的坑,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!springboot2.x引入feign踩的...
    99+
    2023-06-26
  • springboot2.x引入feign踩的坑及解决
    目录springboot2.x引入feign踩的坑一、需求二、什么是feign三、springboot1.x中feign的使用四、springboot2.x中feign的使用feig...
    99+
    2024-04-02
  • SpringBoot2.x版本中,使用SpringSession踩的坑及解决
    SpringBoot2.x SpringSession踩坑 Exception encountered during context initialization - cancel...
    99+
    2024-04-02
  • 如何解决Go gorm踩过的坑
    这篇文章给大家分享的是有关如何解决Go gorm踩过的坑的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是gogo是golang的简称,golang 是Google开发的一种静态强类型、编译型、并发型,并具有垃...
    99+
    2023-06-14
  • 导入SpringCloud依赖踩的坑及解决
    目录导入SpringCloud依赖踩坑上网找解决方案 springCloud依赖导入失败总结导入SpringCloud依赖踩坑 在使用SpringCloud的时候需要导入...
    99+
    2023-05-15
    导入SpringCloud依赖 SpringCloud依赖 SpringCloud依赖踩坑
  • Feign+mybatisplus搭建项目遇到的坑如何解决
    这篇文章主要讲解了“Feign+mybatisplus搭建项目遇到的坑如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Feign+mybatisplus搭建项目遇到的坑如何解决”吧!出...
    99+
    2023-07-05
  • 如何解决vue引入新版vue-awesome-swiper插件填坑问题
    这篇文章主要介绍了如何解决vue引入新版vue-awesome-swiper插件填坑问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。问题为...
    99+
    2024-04-02
  • SpringCloud feign对象传参和普通传参及遇到的坑如何解决
    这篇文章主要介绍“SpringCloud feign对象传参和普通传参及遇到的坑如何解决”,在日常操作中,相信很多人在SpringCloud feign对象传参和普通传参及遇到的坑如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-06-29
  • ScheduledThreadPoolExecutor的坑如何解决
    今天小编给大家分享一下ScheduledThreadPoolExecutor的坑如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-07-05
  • 如何解决springcloud中Feign导入依赖为unknow的问题
    本篇内容介绍了“如何解决springcloud中Feign导入依赖为unknow的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Feig...
    99+
    2023-06-29
  • 如何解决Go interface的坑
    本篇内容主要讲解“如何解决Go interface的坑”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决Go interface的坑”吧!例子一第一个例子,如下代码:func ma...
    99+
    2023-06-15
  • Java ScheduledThreadPoolExecutor的坑如何解决
    本篇内容介绍了“Java ScheduledThreadPoolExecutor的坑如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2023-07-04
  • vue使用element-ui按需引入时的坑怎么解决
    这篇文章主要讲解了“vue使用element-ui按需引入时的坑怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue使用element-ui按需引入时的坑怎么解决”吧!步骤:安装 e...
    99+
    2023-06-30
  • win11中文输入法变成x如何解决
    本篇内容主要讲解“win11中文输入法变成x如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win11中文输入法变成x如何解决”吧!解决方法:最近有的用户出现了如图所示的输入法变成X的问题...
    99+
    2023-06-30
  • react引入antd报错如何解决
    本篇内容介绍了“react引入antd报错如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!react引入antd报错的解决办法:1、通...
    99+
    2023-07-05
  • 引入jquery但报错如何解决
    这篇文章主要介绍了引入jquery但报错如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇引入jquery但报错如何解决文章都会有所收获,下面我们一起来看看吧。一、引入jQuery的方法是否正确在Web开发...
    99+
    2023-07-06
  • Java中如何解决BigDecimal的坑
    这篇文章将为大家详细讲解有关Java中如何解决BigDecimal的坑,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java BigDecimal的坑采坑处BigDecimal bd ...
    99+
    2023-06-25
  • electron打包的坑如何解决
    这篇文章主要介绍“electron打包的坑如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“electron打包的坑如何解决”文章能帮助大家解决问题。两种方式,electron-builder打...
    99+
    2023-07-05
  • NSMutable对象的坑如何解决
    本文小编为大家详细介绍“NSMutable对象的坑如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“NSMutable对象的坑如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。背景最近处理了两个崩溃,都...
    99+
    2023-07-05
  • Pytorch中retain_graph的坑如何解决
    本篇内容主要讲解“Pytorch中retain_graph的坑如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pytorch中retain_graph的坑如何解决”吧!Pytorch中re...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作