iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringCloud OpenFeign如何实现
  • 361
分享到

SpringCloud OpenFeign如何实现

2023-07-05 04:07:24 361人浏览 八月长安
摘要

这篇文章主要介绍“SpringCloud OpenFeign如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springCloud OpenFeign如何实现”文章能帮助大

这篇文章主要介绍“SpringCloud OpenFeign如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springCloud OpenFeign如何实现”文章能帮助大家解决问题。

常用注解

OpenFeign是使用接口+注解实现的,因此了解它的常用注解是必要的,有以下几个:

@EnableFeignClients:在启动类上添加,用于开启OpenFeign功能。当项目启动时,会扫描带有@FeignClient的接口,生成代理类并注册到Spring容器

@FeignClient:通知OpenFeign组件对该注解下的接口进行解析,通过动态代理的方式产生实现类,完成服务调用

@RequestMapping:springMVC中的注解,不过此时该注解表示发起Request请求(默认Get方式)

@GetMapping:Springmvc中的注解,不过此时该注解表示发起Get请求

@PostMapping:SpringMvc中的注解,不过此时该注解表示发起Post请求

代码实现

首先得把Nacos启动

服务提供方,

bootstrap.yml:

server:
  port: 8083
  servlet:
    context-path: /nacosProvider

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

引入依赖:

<dependencies>    <dependency>        <groupId>com.alibaba.cloud</groupId>        <artifactId>spring-cloud-starter-alibaba-nacos-discovery        </artifactId>        <version>2.2.0.RELEASE</version>    </dependency>    <dependency>        <groupId>org.projectlombok</groupId>        <artifactId>lombok</artifactId>    </dependency></dependencies>

服务方法:

@Controller@RequestMapping("/provide")public class ProviderController {    @RequestMapping("/distribute")    @ResponseBody    public String distribute() {        return "吃鸡胸肉";    }    @RequestMapping("/distribute1")    @ResponseBody    public String distribute1(String name, Integer age) {        return "姓名:" + name + ",年龄:" + age;    }    @PostMapping("/distribute2")    @ResponseBody    public String distribute2(@RequestBody Person p) {        return "身高:" + p.getHeight() + ",肤色:" + p.getSkin();    }}
import lombok.Data;@Datapublic class Person {    private Integer height;    private String skin;}

服务调用方,

bootstrap.yml

server:
  port: 8082
  servlet:
    context-path: /nacosInvoke

spring:
  application:
    name: nacos-invoke
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

引入依赖:

<dependencies>    <dependency>        <groupId>com.alibaba.cloud</groupId>        <artifactId>spring-cloud-starter-alibaba-nacos-discovery        </artifactId>        <version>2.2.0.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-openfeign</artifactId>        <version>2.2.0.RELEASE</version>    </dependency>    <dependency>        <groupId>org.projectlombok</groupId>        <artifactId>lombok</artifactId>    </dependency></dependencies>

启动类上添加注解:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.openfeign.EnableFeignClients;//开启OpenFeign@EnableFeignClients@SpringBootApplicationpublic class NacosInvokeApplication {    public static void main(String[] args) {        SpringApplication.run(NacosConfigApplication.class, args);    }}

创建@FeignClient修饰的接口:

import com.gs.nacos_invoke.dto.Person;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.WEB.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestParam;@FeignClient(value = "nacos-provider")public interface InvokeClient {    @GetMapping("/nacosProvider/provide/distribute")    String distribute();    @GetMapping("/nacosProvider/provide/distribute1")    String distribute1(@RequestParam("name") String name,     @RequestParam("age") Integer age);    @PostMapping("/nacosProvider/provide/distribute2")    String distribute2(@RequestBody Person p);}

Person类(服务调用方再创建一个,不是同一个):

import lombok.Data;@Datapublic class Person {    private Integer height;    private String skin;}

编写控制器,使用接口请求提供方的服务:

import com.gs.nacos_invoke.dto.Person;import com.gs.nacos_config.feign.InvokeClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/user")public class UserController {    @Autowired    private InvokeClient invokeClient;    @GetMapping("/invoke")    public void invoke(String name, Integer age) {        String str = invokeClient.distribute();        System.out.println(str);    }    @GetMapping("/invoke1")    public void invoke1() {        String str = invokeClient.distribute1("coder", 20);        System.out.println(str);    }    @GetMapping("/invoke2")    public void invoke2() {        Person p = new Person();        p.setHeight(183);        p.setSkin("黄皮肤");        String s = invokeClient.distribute2(p);        System.out.println(s);    }}

注意事项

OpenFeign是基于Ribbon的,所以它默认是负载均衡的。其次,它也是基于Hystrix的,有超时降级的处理:默认服务提供方的接口超时时间是1s,超过1s服务调用方会报错。1s是可以配置的,按照业务需要调整。@FeignClient注解有个fallback属性,当该属性有值时,服务提供方超时,会返回程序所指定的降级值。

服务调用方,bootstrap.yml添加(更规范的做法是引入spring-cloud-starter-alibaba-nacos-config依赖,nacos中新建配置,然后在这个配置中添加):

feign:
  hystrix:
    enabled: true
ribbon:
    # 请求连接的超时时间
    ConnectionTimeout: 3000
    # 请求处理的超时时间
    ReadTimeout: 3000

hystrix:
    command:
        default:
            execution:
                isolation:
                    thread:
                        timeoutInMilliseconds: 3000

接口修改为:

import com.gs.nacos_invoke.dto.Person;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestParam;@FeignClient(value = "nacos-provider",        fallback = InvokeClientFallback.class)public interface InvokeClient {    @GetMapping("/nacosProvider/provide/distribute")    String distribute();    @GetMapping("/nacosProvider/provide/distribute1")    String distribute1(@RequestParam("name") String name,     @RequestParam("age") Integer age);    @PostMapping("/nacosProvider/provide/distribute2")    String distribute2(@RequestBody Person p);}

fallback指定的类:

import com.gs.nacos_invoke.dto.Person;import org.springframework.stereotype.Component;@Componentpublic class InvokeClientFallback implements InvokeClient {    @Override    public String distribute() {        return "超时3s";    }    @Override    public String distribute1(String name, Integer age) {        return "超时3s";    }    @Override    public String distribute2(Person p) {        return "超时3s";    }}

服务提供方ProviderController类的方法中,加入Thread.sleep(4000);或者throw new RuntimeException("抛异常");来触发降级(抛出未捕获的异常也能触发)。

关于“SprinGCloud OpenFeign如何实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: SpringCloud OpenFeign如何实现

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

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

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

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

下载Word文档
猜你喜欢
  • SpringCloud OpenFeign如何实现
    这篇文章主要介绍“SpringCloud OpenFeign如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud OpenFeign如何实现”文章能帮助大...
    99+
    2023-07-05
  • 如何用SpringCloud的OpenFeign进行服务调用
    本篇内容介绍了“如何用SpringCloud的OpenFeign进行服务调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言Feign是一...
    99+
    2023-06-26
  • SpringCloud openfeign声明式服务调用实现方法介绍
    目录一、介绍二、使用 三、通讯优化一、介绍 OpenFeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)(称OpenFeign作...
    99+
    2022-12-08
    SpringCloud openfeign声明式服务调用 SpringCloud openfeign
  • SpringCloud详解实现声明式微服务调用OpenFeign方法
    目录OpenFeign介绍项目实战创建项目启动项目验证总结OpenFeign介绍 一开始,我们使用原生的 DiscoveryClient 发现服务和使用RestTemplate进行服...
    99+
    2024-04-02
  • SpringCloud升级2020.0.x版之OpenFeign简介与使用实现思路
    目录OpenFeign 的由来和实现思路OpenFeign 简介OpenFeign 基本使用 本系列代码地址:https://github.com/JoJoTec/spring-cl...
    99+
    2024-04-02
  • 一篇文章教你如何在SpringCloud项目中使用OpenFeign
    目录OpenFeign的介绍OpenFeign是一种声明式 、模板化的HTTP客户端。OpenFeign与Feign的之间的关系OpenFegin中的两个常用注解在项目中使用Open...
    99+
    2024-04-02
  • SpringCloudRibbon与OpenFeign详解如何实现服务调用
    目录Ribbon初识RibbonRibbon是什么Ribbon能干什么使用Ribbon实现负载均衡RestTemplate三步走负载均衡算法轮询算法OpenFeign初识OpenFe...
    99+
    2024-04-02
  • SpringCloud如何实现灰度发布
    这篇文章主要讲解了“SpringCloud如何实现灰度发布”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringCloud如何实现灰度发布”吧!1.什么是灰度发布?灰度发布又称金丝雀发布...
    99+
    2023-06-30
  • SpringCloud协同开发如何实现
    本文小编为大家详细介绍“SpringCloud协同开发如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud协同开发如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。微服务注册问题像下...
    99+
    2023-07-04
  • SpringCloud中如何使用Sentinel实现限流
    这篇文章主要介绍了SpringCloud中如何使用Sentinel实现限流的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringCloud中如何使用Sentinel实现限流文章都会有所收获,下面我们一起来看...
    99+
    2023-06-26
  • springcloud如何用Redlock实现分布式锁
    目录一、redlock简介 二、怎么用java使用 redlock 三、参考资料 之前写过一篇文章《如何在springcloud分布式系统中实现分布式锁? 》,由于自己仅仅是阅读了相...
    99+
    2024-04-02
  • springcloud中如何实现熔断监控Turbine
    小编给大家分享一下springcloud中如何实现熔断监控Turbine,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在复杂的分布式系统中,相同服务的节点经常需要...
    99+
    2023-06-05
  • 如何实现SpringCloud Gateway请求响应日志
    这篇文章主要讲解了“如何实现SpringCloud Gateway请求响应日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现SpringCloud ...
    99+
    2024-04-02
  • SpringCloud如何实现Zuul集群(负载均衡)
    目录前言:一、使用 Nginx+Zuul 实现网关集群1.创建Eurek注册中心、会员服务、订单服务 (略)2. 创建Zuul服务3. 下载Nginx服务器二、 测试三、补充Ngin...
    99+
    2024-04-02
  • springcloud中如何实现服务网关过滤器
    这篇文章将为大家详细讲解有关springcloud中如何实现服务网关过滤器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。过滤器作用我们的微服务应用提供的接口就可以通过统一的API网关入口被客户端访问到了。...
    99+
    2023-06-05
  • SpringCloud中如何利用Ribbon实现负载均衡
    SpringCloud中如何利用Ribbon实现负载均衡,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先在pom文件添加Fegin的依赖包。  <d...
    99+
    2023-06-05
  • springcloud gateway如何实现路由和负载均衡
    简介: gateway主要是做路由 负载,过滤 主要是替代zuul 1.x 性能比zuul好 zuul是基于 Servlet ,gateway是基于spring-webflux 用的...
    99+
    2024-04-02
  • SpringCloud如何使用Feign实现动态路由操作
    这篇文章主要介绍“SpringCloud如何使用Feign实现动态路由操作”,在日常操作中,相信很多人在SpringCloud如何使用Feign实现动态路由操作问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
    99+
    2023-06-30
  • SpringCloud如何实现微服务数据权限控制
    这篇文章将为大家详细讲解有关SpringCloud如何实现微服务数据权限控制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。举个例子:有一批业务员跟进全国的销售订单。他们被按城市进行划分,一个业务员跟进3个...
    99+
    2023-06-21
  • SpringCloud Gateway动态转发后端服务如何实现
    今天小编给大家分享一下SpringCloud Gateway动态转发后端服务如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作