iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway
  • 633
分享到

SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway

2023-07-05 20:07:00 633人浏览 八月长安
摘要

本文小编为大家详细介绍“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway”,内容详细,步骤清晰,细节处理妥当,希望这篇“springCloud怎么实现服务调用feign、熔断hystrix和网关gat

本文小编为大家详细介绍“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway”,内容详细,步骤清晰,细节处理妥当,希望这篇“springCloud怎么实现服务调用feign、熔断hystrix和网关gateway”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

sprinGCloud架构的认识

我们之前测试过eureka服务注册功能,它能很好的保存服务之间的通讯关系,是维系微服务通讯网之间的电话本,同时也能够以心跳检测的形式监听每一个微服务的生命状态,对于结点进行很好的监控。那么我们今天的服务调用就是将接口变得易于管理,更简单的去调用分布式系统内的微服务。而对于同一时间大量调用的某一个微服务来说它的压力是巨大了,但是出于用户体验的原因,我们必须对用户返回什么,对前端给出一个响应,而不是挂出404或者非常慢的响应。那么熔断降级的处理就是非常合适的做法。另外我们对于分布式调用微服务的形式也应、配置一个类似于nignx之类的主机进行反向的分发。在我们的cloud生态立提供了gateway网关组件去实现请求的分发与微服务路由的管理。

那么就让我们用上次测试eureka的项目进行测试:

首先是利用feign组件实现服务调用与熔断降级(这里的熔断可以自行去配置,默认是超过1秒没给出响应就返回熔断的降级响应):

  <!--引入feign服务调用-->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-openfeign</artifactId>        </dependency>

以上是feign的依赖,我们之前的项目采取的是父工程pom继承体系,便于管理公共依赖。

@EnableFeignClients

在orderApplication类上打上开启feign服务组件的注解。

这里先介绍如何使用feign实现简单的微服务调用:

我们需要有接口作为一个product服务调用的客户端(可以含有很多这样的客户端,便于管理不同的微服务调用接口)当前我们是order模块:

@FeignClient(name = "product")public interface FeignInterface {        @GetMapping("/product/{id}")    Product findById(@PathVariable("id")int id);}

然后我们就可以利用自动注入的形式在controller里优化接口了:

    @Autowired    private FeignInterface feignInterface;    @GetMapping("/buyByFeign/{id}")    public Product getProductByFeign(@PathVariable("id") int id) {        return feignInterface.findById(id);    }

细心的同志可以看到之前的controller接口是这样的:

    @Autowired    private RestTemplate restTemplate;    @RequestMapping(value = "/buy/{id}", method = RequestMethod.GET)    public Product getProductById(@PathVariable("id") int id) {        return restTemplate.getForObject("Http://product/product/" + id, Product.class);    }

两相对比,我们发现feign服务调用的形式完全不需要写任何请求语句,也不需要处理与product微服务之间的响应。浏览器访问时依旧按照order接口上的路径去写即可。

其次介绍一下feign实现的熔断:

我们对某一个微服务调用路线准备熔断:举个例子,本文主要是order与product模块之间的调用关系,因此熔断也就是处理从order到product模块之间的请求路线:

下一个实现类去实现feign服务调用接口实现的方法就是我们的熔断方法(注意这里开启熔断器服务的注解也需打在orderApplication类上,在下面介绍hystrix时会给出来):

@Component("feignHystrix")public class FeignHystrix implements FeignInterface{    public Product findById(int id) {        Product product = new Product();        product.setId(-1);        product.setProductName("服务熔断");        return product;    }}

要打上spring组件注解交给spring管理,不然跑起来就是一个没有实例化的字节码文件,根本用不了。

其次我们需要告诉feign客户端,你这条调用线路的熔断降级处理类型:

@FeignClient(name = "product",fallback = FeignHystrix.class)public interface FeignInterface {    @GetMapping("/product/{id}")    Product findById(@PathVariable("id")int id);}

fallback = FeignHystrix.class就是确定熔断降级类型的配置。

这样的方式就可以实现feign的服务调用与熔断降级了。但是会出现直接就是熔断方法的响应,原因是在controller层的自动注入会直接默认你注入的是接口的实现类型,这里我们最好是绑定一下name。

其次我们来换一种熔断处理,也就是利用hystrix去实现服务调用关系间的熔断处理:

        <!--引入服务熔断hystrix-->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>            <version>2.2.10.RELEASE</version>        </dependency>

以上是它的依赖,hystrix组件用起来也是十分的简单,会对你的要求进行不同的配置,这里本文只展示最基本的使用举例:

@EnableCircuitBreaker

记住在Application类上开启熔断器才行,基本的使用十分简单就是直接在controller接口类里这么写就可以:

    @Autowired    private RestTemplate restTemplate;    @RequestMapping(value = "/buy/{id}", method = RequestMethod.GET)    @HystrixCommand(fallbackMethod = "getProductFallBack") //给接口配置hystrix熔断降级方法    public Product getProductById(@PathVariable("id") int id) {        try {            Thread.sleep(2000);        } catch (InterruptedException e) {            System.out.println("睡两秒等熔断");        }        return restTemplate.getForObject("http://product/product/" + id, Product.class);    }        public Product getProductFallBack(int id) {        Product product = new Product();        product.setId(-1);        product.setProductName("服务熔断");        return product;    }

注意这个降级的方法是有要求的,参数类型与返回值要与接口方法一致。你也可以建立一个新的类型里面统一的书写降级方法,调用时配置上类型与方法的路径即可(默认是1秒不给响应就采取熔断降级,所以直接开线程睡2秒测试熔断响应)。

注册中心与服务发现可以使得微服务之间鸽子能够查询到各自的存在,不需要开发者手动的配置各个微服务的路由。服务调用与熔断降级有效的将微服务之间的调用与流量的压力进行了管控与优化,但是由客户端或者是浏览器发送来的请求如果还是直接ip加端口加访问路径的话,未必就太麻烦了?这样对于前端开发来说也是很大的痛点!所以nignx反向代理很受欢迎,也是采用一个nignx.conf文件作为内部系统服务接口的通讯录,外部请求统一ip与端口只需要给我你想要访问的服务名称我就可以帮你通讯。这也就是网关的基本功能。当然如果简单的路由分发nignx完全可以充当网关的角色,这里我们先介绍一下gateway组件的基本使用:

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

以上是gateway的依赖,我们需要前置知道的是gateway与spring WEB有冲突,所以最好不要安装web的依赖,如果和我一样是父工程pom管理的可以在application.yml文件配置这一项解决冲突:

spring:
  application:
    name: gateway
  main:
    web-application-type: Reactive

其次就是网关的配置信息了(你不需要写任何类型文件,只需要浅浅的配置一下yml文件):

spring: 
    cloud:
        gateway:
          routes:
          - id: order
            uri: http://127.0.0.1:9002
            predicates:
            - Path=/order/**
          - id: product
            uri: http://127.0.0.1:9001
            predicates:
            - Path=/product/**

这个routers像极了view项目里我们书写的router.js里的routes[]数组的内容,微服务注册名称,微服务内部访问路径,微服务默认的访问入口(这里的入口是controller类型上打的@RequestMapping内容,后面的二级三级就是我们需要填写访问的)举个例子(gateway默认的端口是8080)我们现在需要访问order微服务的buy/1去查1号商品,之前我们的访问方式是:http://127.0.0.1:9002/order/buy/1

现在配置完以上的网关内容后我们只需要访问localhost:8080/order/buy/1(注意这个order是代表微服务名称,也就是你配置的id,可不是controller类型的一级路由)。

读到这里,这篇“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway

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

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

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

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

下载Word文档
猜你喜欢
  • SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway
    本文小编为大家详细介绍“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gateway”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud怎么实现服务调用feign、熔断hystrix和网关gat...
    99+
    2023-07-05
  • SpringCloud实现服务调用feign与熔断hystrix和网关gateway详细分析
    回归cloud的学习,对于springcloud的架构与原理以及性能的分析我们都在之前的文章里写过: springcloud架构的认识 我们之前测试过eureka服务注册功能,它能很...
    99+
    2023-05-14
    SpringCloud服务调用feign SpringCloud熔断hystrix SpringCloud网关gateway
  • 如何自定义feign调用实现hystrix超时、异常熔断
    需求描述 spring cloud 项目中feign 整合 hystrix经常使用,但是最近发现hystrix功能强大,但是对我们来说有些大材小用。 首先我只需要他的一个熔断作用,就...
    99+
    2024-04-02
  • springcloud整合gateway怎么实现网关
    这篇文章主要介绍了springcloud整合gateway怎么实现网关的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springcloud整合gateway怎么实现网关文章都会有所收获,下面我们一起来看看吧。1...
    99+
    2023-06-26
  • SpringCloud使用Resilience4j实现服务熔断的方法
    目录CircuitBreaker 断路器隔舱Bulkhead限速器RateLimiterCircuitBreaker 断路器 服务熔断是为了保护我们的服务,比如当某个服务出现问题的时...
    99+
    2022-12-29
    Spring Cloud 服务熔断 Spring Cloud Resilience4j 服务熔断
  • SpringCloud微服务网关Gateway怎么创建
    这篇文章主要介绍“SpringCloud微服务网关Gateway怎么创建”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud微服务网关Gateway怎么创建”文章能帮助大家解决问题。...
    99+
    2023-07-02
  • SpringCloud Zuul怎么实现负载均衡和熔断机制
    小编给大家分享一下SpringCloud Zuul怎么实现负载均衡和熔断机制,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、场景Zuul网关下实现其负载均衡与熔...
    99+
    2023-06-20
  • SpringCloud Gateway服务网关的部署与使用的方法是什么
    这篇文章主要介绍“SpringCloud Gateway服务网关的部署与使用的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud Gateway服务网...
    99+
    2023-07-05
  • springcloud feign服务间调用date类型转换错误怎么解决
    这篇文章主要讲解了“springcloud feign服务间调用date类型转换错误怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springcloud feig...
    99+
    2023-06-29
  • 在Springcloud中怎么用zuul来实现网关功能
    这篇文章给大家分享的是有关在Springcloud中怎么用zuul来实现网关功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。个人分类: Spring Cloud编辑一、简介    ...
    99+
    2023-06-05
  • springcloud中Ribbon和RestTemplate实现服务调用与负载均衡
    文件目录结构 文件目录结构很重要,特别注意的是rule文件要放在主启动类上一级位置,才能够扫描。 写pom <dependencies> <!...
    99+
    2024-04-02
  • 怎么用bat和reg实现关闭局域网共享
    这篇文章主要为大家展示了“怎么用bat和reg实现关闭局域网共享”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用bat和reg实现关闭局域网共享”这篇文章吧。关闭局域网共享.cmd代码如下:...
    99+
    2023-06-09
  • 怎么在SpringCloud中使用Eureka实现服务之间的传递数据
    这期内容当中小编将会给大家带来有关怎么在SpringCloud中使用Eureka实现服务之间的传递数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、使用RestTemplate+Ip方式:1、传递数据...
    99+
    2023-06-15
  • 使用Nodejs怎么实现内网穿透服务
    这篇文章给大家介绍使用Nodejs怎么实现内网穿透服务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 局域网内代理我们先来回顾上篇,如何实现一个局域网内的服务代理?因为这个非常简单,所以,直接上代码。const&n...
    99+
    2023-06-15
  • 怎么使用云服务器实现内网穿透服务
    使用云服务器实现内网穿透服务的具体步骤如下: 选择适当的云服务器 :选择一款适合您需要服务的云服务器。有多种云服务器供您选择,包括Amazon Web Services(AMS)、AWS、Google Cloud等。 注册并获取许可证:...
    99+
    2023-10-26
    内网 服务器
  • 怎么使用云服务器实现内网穿透
    使用云服务器实现内网穿透可能需要您提供内网IP地址和端口号,以便管理员可以在云主机上创建私有网络。内网穿透的过程可以大致如下: 确定需要穿透的内网地址和端口号:在云服务器上安装相应的客户端程序和脚本,例如:https://ycloud....
    99+
    2023-10-26
    内网 服务器
  • SpringBoot2中怎么利用Dubbo框架实现RPC服务远程调用
    SpringBoot2中怎么利用Dubbo框架实现RPC服务远程调用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Dubbo框架简介1、框架依赖图例说明:1...
    99+
    2023-06-02
  • 怎么利用JAVA实现可以自行关闭服务器
    这篇文章将为大家详细讲解有关怎么利用JAVA实现可以自行关闭服务器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JAVA实现可以自行关闭的服务器普通实现的服务器都无法关闭自身,只有依靠操作系统来强行终止服...
    99+
    2023-06-20
  • 怎么使用云服务器实现内网穿透连接服务
    使用云服务器实现内网穿透连接服务是一种常见的网络连接方式,可以帮助实现内网访问外网。以下是使用云服务器实现内网穿透连接服务的步骤和方法: 步骤: 配置服务器端的虚拟防火墙:在客户端和云服务器之间安装云服务器提供的虚拟防火墙,可以根据虚拟...
    99+
    2023-10-26
    内网 服务器
  • 怎么使用云服务器实现内网穿透服务功能
    使用云服务器实现内网穿透服务功能是一种常见的网络攻击手段,它可以通过对内网终端电脑进行远程操控,绕过防火墙、网络防护等安全保护措施,进入目标内网计算机系统并获取用户敏感信息或者执行恶意操作。以下是具体的步骤和建议: 步骤: 选择云服务器...
    99+
    2023-10-26
    内网 功能 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作