iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在springboot中使用feign实现跨服务调用
  • 335
分享到

如何在springboot中使用feign实现跨服务调用

2023-06-06 16:06:10 335人浏览 八月长安
摘要

这篇文章给大家介绍如何在SpringBoot中使用feign实现跨服务调用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。springboot整合feign引入依赖, 这里注意, spring-cloud.version

这篇文章给大家介绍如何在SpringBoot中使用feign实现跨服务调用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

springboot整合feign

引入依赖, 这里注意, spring-cloud.version记得要和spring-boot版本匹配, 我这里spring-boot版本是2.1.3, 所以spring-cloud选择Greenwich.SR2版本.

大致的版本对应关系如下

如何在springboot中使用feign实现跨服务调用

更详细的请去https://start.spring.io/actuator/info
查询!

<properties>  <spring-cloud.version>Greenwich.SR2</spring-cloud.version></properties><dependencyManagement>  <dependencies>   <!--SpringCloud依赖 -->   <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-dependencies</artifactId>    <version>${spring-cloud.version}</version>    <type>pom</type>    <scope>import</scope>   </dependency>  </dependencies> </dependencyManagement> <dependencies>  <!--openfeign跨服务调用-->  <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-openfeign</artifactId>  </dependency>  <!--openfeign底层使用ApacheHttpClient调用-->  <dependency>   <groupId>io.GitHub.openfeign</groupId>   <artifactId>feign-httpclient</artifactId>  </dependency> </dependencies>

然后我们去项目的启动类上加上注解
@EnableFeignClients

如何在springboot中使用feign实现跨服务调用

最后, 加上Feign的配置
application.properties

server.port=9999#******************openfeign配置,参数采用的是默认的配置,可根据实际情况调整***********************#启用ApacheHttpClient。默认就是true,使用HttpClientConnectionManager管理连接复用feign.httpclient.enabled=true#连接池的最大连接数,默认200feign.httpclient.max-connections=200#每个路由(服务器)分配的组最大连接数,默认50feign.httpclient.max-connections-per-route=50#连接最大存活时间,默认900秒feign.httpclient.time-to-live=900#连接最大存活时间单位秒feign.httpclient.time-to-live-unit=seconds#FeignAcceptGzipEncodingInterceptor拦截器被激活,会在header中添加Accept-Encoding:gzip,deflate,表明服务端在返回值时可以使用如下两个方式压缩返回结果feign.compression.response.enabled=true#FeignContentGzipEncodingInterceptor拦截器被激活,会在header中添加Content-Encoding:gzip,deflate,表明body中的参数是使用这两个方式的压缩feign.compression.request.enabled=true#content-length大于2048就进行请求参数的gzip压缩feign.compression.request.minRequestSize=2048#开启断路器feign.hystrix.enabled=true#断路器的隔离策略,默认就是线程池,SEMAPHORE模式下,就是主线程调用的远程的服务,即同步的hystrix.command.default.execution.isolation.strategy=THREAD#断路器超时设置hystrix.command.default.execution.timeout.enabled=true#总体请求在45秒还是无法得到响应,建议触发熔断(ribbon每个请求读取15秒超时,两个实例重试就是30秒,openfeign外层默认会进行一次调用,4次重试)hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=45000#断路器的线程池存在一个问题,在队列满了以后,不会再去创建新的线程直到maximumSize#核心线程池大小hystrix.threadpool.default.coreSize=10#最大线程池大小hystrix.threadpool.default.maximumSize=10#超过这个空闲时间,多于coreSize数量的线程会被回收,1分钟hystrix.threadpool.default.keepAliveTimeMinutes=1#队列的大小,默认为-1,即没有队列hystrix.threadpool.default.maxQueueSize=200#队列任务达到此阈值后,就开始拒绝;实际使用此参数进行队列是否满的判断hystrix.threadpool.default.queueSizeRejectionThreshold=180#负载均衡配置#读取超时15秒,与原RestTemplate保持一致ribbon.ReadTimeout=15000#连接超时15秒,与原RestTemplate保持一致ribbon.ConnectTimeout=15000##每台服务器最多重试次数,但是首次调用不包括在内ribbon.MaxAutoRetries=0##最多重试多少台服务器,与实际实例数保持一致(不包括首台)ribbon.MaxAutoRetriesNextServer=1#是否所有操作都重试,# false:get请求中,连接超时,读取超时都会重试,其他请求(put,post)连接超时重试,读取超时不重试。# true:get请求中,连接超时,读取超时都会重试,其他请求(put,post)连接超时重试,读取超时重试。#对于请求(put,post)要做好接口的幂等性ribbon.OkToRetryOnAllOperations=true

spring-boot整合feign完成, 接下来我们编写测试代码

测试代码

两个服务

  • sb-alibaba-Nacos (被调用方服务, 127.0.0.1:8081), 提供 getInfoById接口

  • sb-feign (调用方服务, 127.0.0.1:9999), 提供 getInfoById 测试接口

sb-alibaba-nacos提供的测试接口

@GetMapping(value = "getInfoById") public String getInfoById(@RequestParam(value = "id") Long Id) {  return "example-service return :" + Id; }

sb-feign相关代码

我们新建个包 feign,用来放所有涉及跨服务调用的类

如何在springboot中使用feign实现跨服务调用

ExampleControllerFeignClient.java:

package com.mrcoder.sbfeign.feign;import feign.hystrix.FallbackFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.stereotype.Component;import org.springframework.WEB.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;@FeignClient(name = "sb-alibaba-nacos", url = "http://127.0.0.1:8081/", fallbackFactory = ExampleControllerFeignClient.ExampleControllerFeignClientFallbackFactory.class)public interface ExampleControllerFeignClient { @GetMapping(value = "getInfoById") String getInfoById(@RequestParam(value = "id") Long Id);  @Component class ExampleControllerFeignClientFallbackFactory implements FallbackFactory<ExampleControllerFeignClient> {  private Logger logger = LoggerFactory.getLogger(ExampleControllerFeignClientFallbackFactory.class);  @Override  public ExampleControllerFeignClient create(Throwable cause) {   return new ExampleControllerFeignClient() {    @Override    public String getInfoById(Long signingLogId) {     logger.error("跨服务调用失败, 原因是:" + cause.getMessage());     return "失败, 原因是:" + cause.getMessage();    }   };  } }}

关键代码就是

@FeignClient(name = "sb-alibaba-nacos", url = "http://127.0.0.1:8081/", fallbackFactory = ExampleControllerFeignClient.ExampleControllerFeignClientFallbackFactory.class)
  • name 就是被调用方的服务名称 (这里如果你没有配置服务注册中心的化,其实可以随便写)

  • url 就是被调用方的地址(如果配置了服务注册中心, 可以不写!, 不过两个服务必须都注册!,这样才能找到!)

  • fallbackFactory 就是调用失败时指定的处理类

最后, 我们写个测试方法

package com.mrcoder.sbfeign.controller;import com.mrcoder.sbfeign.feign.ExampleControllerFeignClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;@CrossOrigin@RestControllerpublic class TestController { @Autowired private ExampleControllerFeignClient exampleControllerFeignClient; @RequestMapping(value = "getInfoById", method = RequestMethod.GET) public String test(@RequestParam(value = "id") Long Id) {  return exampleControllerFeignClient.getInfoById(Id); }}

开启两个服务sb-alibaba-nacos, sb-feign

而后访问sb-feign的测试方法

http://localhost:9999/getInfoById?id=22

出现

sb-alibaba-nacos return :22

关于如何在springboot中使用feign实现跨服务调用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何在springboot中使用feign实现跨服务调用

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在springboot中使用feign实现跨服务调用
    这篇文章给大家介绍如何在springboot中使用feign实现跨服务调用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。springboot整合feign引入依赖, 这里注意, spring-cloud.version...
    99+
    2023-06-06
  • SpringBoot使用Feign调用其他服务接口
    使用SpringCloud的Feign组件能够为服务间的调用节省编码时间并提高开发效率,当服务本身不复杂时可以单独将该组件拿出使用。 引入依赖 <!-- https://...
    99+
    2024-04-02
  • 怎么在SpringBoot中利用Feign调用其他服务接口
    本篇文章给大家分享的是有关怎么在SpringBoot中利用Feign调用其他服务接口,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引入依赖<!-- https:...
    99+
    2023-06-14
  • SpringBoot动态Feign服务调用详解
    目录1.Feign传统方式的不足2.动态Feign2.1.服务生产者2.2.动态Feign2.3.服务消费者3.总结1.Feign传统方式的不足 ①.在微服务架构中,当我们使用Fei...
    99+
    2022-12-21
    SpringBoot动态Feign SpringBoot动态Feign服务调用
  • springboot如何单独使用feign简化接口调用
    这篇文章主要介绍了springboot如何单独使用feign简化接口调用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单独使用feign简化接口调用与HttpClient和R...
    99+
    2023-06-29
  • 在SpringBoot中,如何使用Netty实现远程调用方法总结
    Netty Netty是一个NIO客户端服务器框架: 它可快速轻松地开发网络应用程序,例如协议服务器和客户端。 它极大地简化和简化了网络编程,例如TCP和UDP套接...
    99+
    2024-04-02
  • SpringBoot如何通过Feign调用传递Header中参数
    目录【SpringBoot】通过Feign调用传递Header中参数如何通过Feign传递Header参数问题描述解决方案【SpringBoot】通过Feign调用传递Header中...
    99+
    2023-05-17
    SpringBoot Feign调用传递Header参数 SpringBoot Feign调用参数
  • SpringCloud中Feign如何远程调用
    这篇文章将为大家详细讲解有关SpringCloud中Feign如何远程调用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言先来看我们以前利用RestTemplate发起远程调用的代码:这里就有几个问题:...
    99+
    2023-06-22
  • 使用feign服务调用添加Header参数
    feign添加Header参数 @Configuration public class FeignConfiguration implements RequestIntercep...
    99+
    2024-04-02
  • springboot+HttpInvoke如何实现RPC调用
    小编给大家分享一下springboot+HttpInvoke如何实现RPC调用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开始用springboot2+hession4实现RPC服务时,发现第一个服务可以调用成功,但第二...
    99+
    2023-06-29
  • 如何使用Feign logging开启调用日志
    这篇文章主要讲解了“如何使用Feign logging开启调用日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Feign logging开启调用日志”吧!Fei...
    99+
    2023-07-02
  • 如何使用Feign调用第三方http接口
    本篇内容介绍了“如何使用Feign调用第三方http接口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Feign调用第三方http接口我们平...
    99+
    2023-06-29
  • Spring Cloud中如何使用Feign 实现负载均衡
    Spring Cloud中如何使用Feign 实现负载均衡,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。下面来介绍一下使用 Feign 负载均衡。在介绍之前,我们先来对 Fei...
    99+
    2023-06-04
  • 在spring boot中如何使用@Async实现异步调用
    在spring boot中如何使用@Async实现异步调用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是”异步调用”与”同步调用”“同步调用”就是程序按照一定的顺序依次执...
    99+
    2023-05-31
    springboot @async 异步调用
  • springboot如何动态调用实现类
    这篇文章主要介绍了springboot如何动态调用实现类,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot动态调用实现类定义规则的多种类型public&nbs...
    99+
    2023-06-25
  • 微服务Springcloud之Feign如何使用
    本文小编为大家详细介绍“微服务Springcloud之Feign如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“微服务Springcloud之Feign如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • 在springboot中使用mybatis如何实现多数据源
    这篇文章给大家介绍在springboot中使用mybatis如何实现多数据源,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务。我们...
    99+
    2023-05-31
    springboot mybatis 多数据源
  • 基于springboot服务间Feign调用超时的解决方案
    解决springboot服务间Feign调用超时问题概述 1、起因 在完成项目功能需求的开发,经过自己测试以及通过测试组测试通过后,昨晚正式部署到线上环境进行正式运行前的最后一次的测...
    99+
    2024-04-02
  • 使用SpringBoot如何实现注册与发现服务
    这篇文章将为大家详细讲解有关使用SpringBoot如何实现注册与发现服务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。微服务实践“微服务”自然要学习如何做服务注册与发现基于SpringBo...
    99+
    2023-05-31
    springboot 服务
  • 在springboot使用spring 如何实现缓存cache
    本篇文章为大家展示了在springboot使用spring 如何实现缓存cache,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。声明式缓存Spring 定义 CacheManager 和 Cache...
    99+
    2023-05-31
    springboot spring cache
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作