springcloud3 hystrix实现服务降级的案例配置2

这篇具有很好参考价值的文章主要介绍了springcloud3 hystrix实现服务降级的案例配置2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 服务降级的说明

1.1 服务降级说明

"服务器忙,请稍后在试"不让客户达等待,立即返回一个友好的提示。

1.2 服务降级的触发情况

1.程序运行异常;

2.超时;

3.服务熔断触发服务降级;

4.线程池/信号量打满也会导致服务降级

1.3 通用注解

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

二 案例:对每一个方法实行降级处理

2.1 消费端

2.1.1 pom文件

   <!--hystrix-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

2.1.2 设置降级规则

代码

 @GetMapping(value = "/consumer/payment/nacos/{id}")
    @HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")
    })
    public String paymentInfo(@PathVariable("id") Long id)
    {
       System.out.println("获取服务器配置信息serverUrl:"+serverURL);
       System.out.println("9008的controller获取id:"+id);
       String str=orderConsumerService.getPaymentByIdLjf22222(id);
       return "ok:"+serverURL+""+str;
    }
    @GetMapping(value = "/consumer/getinfo/{id}")
    public Object getUserInfo(@PathVariable("id") Long id)
    {
        User u=new User(id.intValue(),"beijing"+id);
       return  orderConsumerService.postQueryParams(u);
    }
    public String dealFallBackInfo(@PathVariable("id") Long id)
    {
        return "我是消费者9008,服务出错了,进行服务降级"+id;
    }

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

 2.1.3 开启hystrix熔断

添加:@EnableHystrix 注解

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

 2.2 服务端

2.2.1 pom文件

   <!--hystrix-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

2.2.2 设置降级规则

1.代码

    @GetMapping(value = "/ljf/getinfo/{id}")
    @HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000")
    })
    public String getPayment(@PathVariable("id") Integer id)
    {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        int k=10/0;
        System.out.println("================服务9009 获取到的参数id:"+id);
        return "服务9009 获取到的参数id:"+id;
    }

    @PostMapping("/path")
   public  String postQueryParams(@RequestBody User user) throws JsonProcessingException {

       String str=  new JsonMapper().writeValueAsString(user);
       System.out.println("post提交....");
       return str;
    }
    public String dealFallBackInfo(@PathVariable("id") Long id)
    {
        return "我是消费者9009,服务出错了,进行服务降级"+id;
    }

2.截图

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

 2.2.3 开启hystrix熔断

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

  2.3 启动服务测试

1.启动nacos,启动sleuth

2.启动consumer9008   provider9009

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

 3.测试

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

三 案例:设置全局降级处理办法

3.1 消费端设置

1.代码

package com.ljf.mscloud.controller;

import com.ljf.mscloud.model.User;
import com.ljf.mscloud.service.OrderConsumerService;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName: OrderConsumerController
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/08/14 18:09:14 
 * @Version: V1.0
 **/
@RestController
@Slf4j
@RefreshScope //支持Nacos的动态刷新功能。
//


@DefaultProperties(defaultFallback = "globalFallBackInfo")
public class OrderConsumerController {
    @Value("${service-url.nacos-user-service}")
   private String serverURL;
    @Autowired
    private OrderConsumerService orderConsumerService;


    @GetMapping(value = "/consumer/payment/nacos/{id}")
    @HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")
    })
    public String paymentInfo(@PathVariable("id") Long id)
    {
       System.out.println("获取服务器配置信息serverUrl:"+serverURL);
       System.out.println("9008的controller获取id:"+id);
       String str=orderConsumerService.getPaymentByIdLjf22222(id);
       return "ok:"+serverURL+""+str;
    }
    @GetMapping(value = "/consumer/getinfo/{id}")
    public Object getUserInfo(@PathVariable("id") Long id)
    {
        User u=new User(id.intValue(),"beijing"+id);
       return  orderConsumerService.postQueryParams(u);
    }
    public String dealFallBackInfo(@PathVariable("id") Long id)
    {
        return "我是消费者9008,服务出错了,进行服务降级"+id;
    }

    public String globalFallBackInfo()
    {

        return "Global异常处理信息,请稍后再试,客户端9008";
    }
}

2.截图

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

 原因在没有在制定方法加:@HystrixCommand  那么加上此注解后:

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

 再次访问:http://localhost:9008/consumer/getinfo/666

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

四 案例:给Feginclient注解的接口上添加降级规则

4.1 controller

package com.ljf.mscloud.controller;

import com.ljf.mscloud.model.User;
import com.ljf.mscloud.service.OrderConsumerService;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName: OrderConsumerController
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/08/14 18:09:14 
 * @Version: V1.0
 **/
@RestController
@Slf4j
@RefreshScope //支持Nacos的动态刷新功能。
//
//@DefaultProperties(defaultFallback = "globalFallBackInfo")
public class OrderConsumerController {
    @Value("${service-url.nacos-user-service}")
   private String serverURL;
    @Autowired
    private OrderConsumerService orderConsumerService;


    @GetMapping(value = "/consumer/payment/nacos/{id}")
 //   @HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {
    //        @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")
   // })
    public String paymentInfo(@PathVariable("id") Long id)
    {
       System.out.println("获取服务器配置信息serverUrl:"+serverURL);
       System.out.println("9008的controller获取id:"+id);
       String str=orderConsumerService.getPaymentByIdLjf22222(id);
       return "ok:"+serverURL+""+str;
    }
    @GetMapping(value = "/consumer/getinfo/{id}")
   // @HystrixCommand
    public Object getUserInfo(@PathVariable("id") Long id)
    {
        User u=new User(id.intValue(),"beijing"+id);
      //  int age = 10/0;
       return  orderConsumerService.postQueryParams(u);
    }
    public String dealFallBackInfo(@PathVariable("id") Long id)
    {

        return "我是消费者9008,服务出错了,进行服务降级"+id;
    }

    public String globalFallBackInfo()
    {

        return "Global异常处理信息,请稍后再试,客户端9008";
    }
}

4.2 service

package com.ljf.mscloud.service;


import com.ljf.mscloud.model.User;
import feign.Headers;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@Component
@FeignClient(value = "mscloud-fegin-nacos-hystrix-provider9009",fallback = PaymentFallbackService.class)
public interface OrderConsumerService {
    @GetMapping(value = "/ljf/getinfo/{yyid}") //相当于:
    public String getPaymentByIdLjf22222(@PathVariable("yyid") Long ssid);
   // @Headers({"Content-Type: application/json"})
   // @PostMapping("/path")
    @PostMapping(value = "/path",consumes ="application/json")
    String postQueryParams(@RequestBody User user);
}

4.3 fallback实现类

@Component
public class PaymentFallbackService  implements OrderConsumerService{
    @Override
    public String getPaymentByIdLjf22222(Long ssid) {
        return "getPaymentByIdLjf22222方法出现问题开始降级";
    }

    @Override
    public String postQueryParams(User user) {
        return "postQueryParams方法出现问题开始降级";
    }
}

 4.4 配置文件

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

 4.5 测试

1.故意只启动 consuemr9008,不启动provider9009 模拟宕机的情况

2.测试

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud

springcloud3 hystrix实现服务降级的案例配置2,springcloud3,spring cloud文章来源地址https://www.toymoban.com/news/detail-653820.html

到了这里,关于springcloud3 hystrix实现服务降级的案例配置2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务:Springboot集成Hystrix实现熔断、降级、隔离

    在分布式微服务的项目中,常常会有多个服务复用,产生多个服务调用的情况。比如A服务调用B服务,B服务调用C服务。服务调用链路长了必然会增加服务超时的概率,服务的超时阻塞会一直占用线程资源,大量的阻塞会直接消耗完服务线程,严重情况下会导致服务直接宕机从

    2024年02月12日
    浏览(47)
  • 【微服务笔记10】微服务组件之Hystrix实现服务降级和服务熔断

    这篇文章,主要介绍微服务组件之Hystrix实现服务降级和服务熔断。 目录 一、服务降级 1.1、什么是服务降级 1.2、实现服务降级 (1)引入依赖 (2)编写Service层代码 (3)编写Controller层代码 (4)运行测试 (5)fallbackMethod属性 二、服务熔断 2.1、什么是服务熔断 2.2、实现服务

    2023年04月11日
    浏览(83)
  • OpenFegin+hystrix实现远程HTTP服务调用、服务降级(深度解析~保姆级)

    OpenFeign 是 Spring Cloud 家族的一个成员, 它最核心的作用是为 HTTP 形式的 Rest API 提供了非常简洁高效的 RPC 调用方式。支持Hystrix 、Ribbon和SpringMVC 注解。 Feign和OpenFeign的区别? 1、Feign: Feign是Netflix公司(第一代SpringCloud)研发的一个轻量级RESTful的伪HTTP服务客户端。 Feign内置了

    2023年04月08日
    浏览(36)
  • springboot整合feign实现RPC调用,并通过Hystrix实现服务降级

    feign/openfeign和dubbo是常用的微服务RPC框架,由于feigin内部已经集成ribbon,自带了负载均衡的功能,当有多个同名的服务注册到注册中心时,会根据ribbon默认的负载均衡算法将请求分配到不同的服务。这篇文章就简单介绍一下怎么使用feign来调用远程的服务。 首先,需要有一个

    2024年02月16日
    浏览(50)
  • springcloud3 bus+springconfig 实现配置文件的动态刷新(了解)

    spring cloud bus是用来将分布式系统的节 点与轻量级消息系统链接起来的框架。 它整合了java的事件处理机制和消息中间件的功能。其中目前支持RabbitMQ和kafka 简介: bus实现多个服务的配置文件动态刷新。 1.2.1 rabbitmq的配置  1.2.2 工程结构  1.2.2 实现方式 1.利用消息纵向触发一个

    2024年02月13日
    浏览(46)
  • springcloud3 GateWay动态路由的案例操作

    gateway相当于所有服务的门户,将客户端请求与服务端应用相分离,客户端请求通过gateway后由定义的路由和断言进行转发,路由代表需要转发请求的地址,断言相当于请求这些地址时所满足的条件,只有同时符合路由和断言才给予转发 gateWay是微服务的API网关,能够实现服务的

    2024年02月13日
    浏览(33)
  • Hystrix入门使用 服务熔断 服务降级 服务雪崩

    hystrix停止更新,理念优秀。 分布式系统面临的问题: 对于复杂的分布式体系,有数十个依赖,依赖不可避免的错误。 服务会出现雪崩, 高可用受到破坏 。 Hystrix就是用于解决分布式系统延迟和容错的开源库。 保证在一个依赖出现问题,不会导致整体的服务失败,避免级联故

    2024年02月07日
    浏览(48)
  • Spring Cloud 容错机试 Hystrix 服务降级 RestTemplate:

    雪崩效应:   如果短信服务炸了后面的所有服务就会起连锁反应造成全部服务挂掉 , 这就是雪崩效应 , 那么其实短信服务又不是我们主要业务 , 这个时候我们可以采用服务降级 , 服务降级就是暂时的把短信服务停掉能用就返回不能用就返回个错误 , 但是它也不会影响

    2024年02月07日
    浏览(43)
  • 云原生微服务 Spring Cloud Hystrix 降级、熔断实战应用

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Spring Cloud Netflix 之 Hystrix 多个微服务之间调用的时候,假如微服

    2024年02月08日
    浏览(42)
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级

    直击微服务作用     遇到了什么问题?         将单体架构拆分成微服务架构后,如果保证多个服务(项目)正常运行?     哪个技术可以解决这个问题?         微服务技术         服务治理: 服务管理,维护服务与服务之间的关系     这个技术如何使用?         netflix/网飞:

    2024年02月03日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包